스프링 부트에서 다음 아웃 바운드 채널 어댑터 구성과 동일한 것은 무엇입니까? 가정 messageChannel
, taskExecutor
그리고 synchronizationFactory
정의된다.
<int:outbound-channel-adapter id="outboundChannelAdapter" channel="messageChannel" ref="handler" method="handle">
<int:poller task-executor="taskExecutor" fixed-delay="500" receive-timeout="500" max-messages-per-poll="10">
<int:transactional synchronization-factory="synchronizationFactory" isolation="READ_COMMITTED"/>
</int:poller>
</int:outbound-channel-adapter>
@ServiceActivator
와 @Poller
어노테이션 트랜잭션 동기화 공장에 대한 옵션을 갖고있는 것 같다하지 않습니다. 는 PollerMetadata
그것을위한 옵션이 있습니다하지만 난에 해당 인스턴스를 연결하는 방법을 잘 모르겠어요 @ServiceActivator
.
이 경우 동기화 팩토리는 여러 스레드를 읽는 DB 기반 채널이기 때문에 필요합니다.
이 같은:
@ServiceActivator(inputChannel = "messageChannel", poller = @Poller("myPollerMetadata"))
public void handle(Message<?> message) {
...
}
@Bean
PollerMetadata myPollerMetadata(Executor taskExecutor, TransactionSynchronizationFactory synchronizationFactory) {
PollerMetadata poller = new PollerMetadata();
poller.setTransactionSynchronizationFactory(synchronizationFactory);
poller.setMaxMessagesPerPoll(10);
poller.setReceiveTimeout(500);
poller.setTaskExecutor(taskExecutor);
poller.setTrigger(new PeriodicTrigger(500));
return poller;
}
Spring Integration Java DSL : https://docs.spring.io/spring-integration/reference/html/dsl.html#java-dsl 학습을 시작할 수도 있습니다 . 동일한 구성은 다음과 같습니다.
@Bean
IntegrationFlow myHandlerFlow(Executor taskExecutor, TransactionSynchronizationFactory synchronizationFactory) {
return IntegrationFlows.from("messageChannel")
.handle(handler, "handle",
c -> c.poller(p -> p
.fixedDelay(500)
.transactionSynchronizationFactory(synchronizationFactory)
.taskExecutor(taskExecutor)
.receiveTimeout(500)
.maxMessagesPerPoll(10)))
.get();
}