我在Spring Integration DSL中配置了一个流程:
// A custom channel Bean
@Autowired
@Qualifier(INPUT_DATA_CHANNEL)
private PublishSubscribeChannel publishSubscribeChannel;
//A Service that can do database recording
@Autowired
private DatabaseActivator databaseActivator;
@Bean
public IntegrationFlow setupDatabaseFlow() {
return IntegrationFlows.from(publishSubscribeChannel)
.handle((p, h) -> databaseActivator.recordToDatabase(p))
.get();
}
根据日志,所有内容都在线程" main" 中按顺序发生。顺便说一下,我同时使用publishSubscribeChannel我有兔子发布者/处理程序,它以同样的方式监听这个频道。
由于数据库操作需要时间,我应该如何正确处理这样的操作,以及#34; main"没有放慢速度。优选地,主线程必须尽快解除阻塞,并且处理应该在工作线程中继续。我是对的吗?
我可以在Flow中引入一个缓冲区来收集来自publishSubscribeChannel的消息吗?
此外,我更喜欢其他线程(池)来处理实际发送,以便从正在执行流的主线程中删除负载。我很清楚Spring中的ThreadPoolTaskExecutor都有一个缓冲区和一个线程池。它是一种使用它的好方法,以及如何在Java DSL中使用ThreadPoolTaskExecutor?
答案 0 :(得分:0)
有关此事的责任人:
/**
* Create a PublishSubscribeChannel that will use an {@link Executor}
* to invoke the handlers. If this is null, each invocation will occur in
* the message sender's thread.
*
* @param executor The executor.
*/
public PublishSubscribeChannel(Executor executor) {
使用Java DSL,您可以声明它:
@Bean
PublishSubscribeChannel publishSubscribeChannel(Executor executor) {
return Channels.publishSubscribe(executor).get();
}