@Component public class GlueEventPubActivity extends GlueActivity<GlueContext>
- producer : producer interface 정보 - method : method 이름 - param-count : parameter 수 - param# : key::type 형태. type 누락시 java.lang.String 으로 함.다음은 activity 사용 예시 입니다.
<activity name="[Client] 외부연계(producer)" class="com.poscoict.glueframework.biz.activity.GlueEventPubActivity">
<transition name="success" value="end"/>
<property name="producer" value="sample.posco.proxy.DeptEventProducer"/>
<property name="method" value="produceEvent"/>
<property name="param-count" value="1"/>
<property name="param1" value="event::sample.posco.domain.entity.DeptEvent"/>
</activity>
activity 사용 예와 관련된 sample.posco.proxy.DeptEventProducer 인터페이스와 구현클래스 입니다.
package sample.posco.proxy;
import sample.posco.domain.event.DeptEvent;
public interface DeptEventProducer
{
void pruduceEvent( DeptEvent event );
}
package sample.posco.bind;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.integration.support.MessageBuilder;
import sample.posco.domain.event.DeptEvent;
import sample.posco.proxy.DeptEventProducer;
@EnableBinding( DeptEventSource.class )
public class DeptEventBinder implements DeptEventProducer
{
@Autowired
DeptEventSource eventSource;
@Override
public void pruduceEvent( DeptEvent event )
{
eventSource.output().send( MessageBuilder.withPayload( event ).setHeader( "domain", event.getClass().getSimpleName() ).build() );
}
}
producer에서 사용하는 MessageChannel 은 다음과 같습니다.
package sample.posco.bind;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
public interface DeptEventSource
{
@Output( "deptOutput" )
MessageChannel output();
}
다음은 DeptEvent 예시입니다.
package sample.posco.domain.event;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class DeptEvent
{
private String deptno;
private String dname;
public DeptEvent( String deptno, String dname )
{
this.deptno = deptno;
this.dname = dname;
}
}
다음은 테스트 코드 일부입니다.
@Bean
public CommandLineRunner run( GlueEventPubActivity activity )
{
return ( args -> {
DeptEvent deptEvent = new DeptEvent( "10", "HR" );
Map props = new HashMap<>();
props.put( "producer", "sample.posco.proxy.DeptEventProducer" );
props.put( "method", "pruduceEvent" );
props.put( "param-count", "1" );
props.put( "param1", "event::sample.posco.domain.entity.DeptEvent" );
GlueDefaultContext ctx = new GlueDefaultContext( "no-service" );
ctx.setActivityProperties( GlueEventPubActivity.class, props );
ctx.put( "event", deptEvent );
activity.runActivity( ctx );
} );
}
| Modifier and Type | Field and Description |
|---|---|
protected static String |
METHOD
property : method
|
protected static String |
PARAM_COUNT
property : param-count
|
protected static String |
PRODUCER
property : producer
|
applicationContext, FAILURE, logger, RESULT_KEY, RESULT_KEY_POSTFIX, SUCCESS| Constructor and Description |
|---|
GlueEventPubActivity() |
| Modifier and Type | Method and Description |
|---|---|
String |
runActivity(GlueContext ctx)
abstract method.
|
checkMethodName, destroy, getMethod, getParamCount, getRequiredType, getResultKey, init, makeMethodParamTypesprotected static final String PRODUCER
protected static final String METHOD
protected static final String PARAM_COUNT
public String runActivity(GlueContext ctx)
GlueActivityrunActivity in class GlueActivity<GlueContext>Copyright © 2019 POSCOICT. All rights reserved.