如何在 spring 引导中使用同步工厂配置出站通道适配器
How to configure outbound channel adapter with synchronization factory in spring boot
spring 引导中的以下出站通道适配器配置等效于什么?假设定义了 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>
注解为@Poller
的@ServiceActivator
好像没有事务同步工厂的选项。
PollerMetadata
有一个选项,但我不确定如何将该实例连接到 @ServiceActivator
。
在这种情况下需要同步工厂,因为它是一个基于数据库的通道,多个线程从中读取数据。
像这样:
@ServiceActivator(inputChannel = "messageChannel", poller = @Poller("myPollerMetadata"))
public void handle(Message<?> message) { // Or what is your service method signature
...
}
@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 集成 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();
}
spring 引导中的以下出站通道适配器配置等效于什么?假设定义了 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>
注解为@Poller
的@ServiceActivator
好像没有事务同步工厂的选项。
PollerMetadata
有一个选项,但我不确定如何将该实例连接到 @ServiceActivator
。
在这种情况下需要同步工厂,因为它是一个基于数据库的通道,多个线程从中读取数据。
像这样:
@ServiceActivator(inputChannel = "messageChannel", poller = @Poller("myPollerMetadata"))
public void handle(Message<?> message) { // Or what is your service method signature
...
}
@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 集成 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();
}