我在 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,因为我有兔子发布者/处理程序,它以相同的方式监听这个频道。
由于数据库操作需要时间,我应该如何正确处理,所以“主要”不会减慢。最好,主线程必须尽快解除阻塞,并且应该在工作线程中继续处理。我对么?
我可以在 Flow 中引入一个缓冲区,以收集来自 publishSubscribeChannel 的消息突发吗?
此外,我更喜欢其他线程(池)来处理实际发送,以便从执行流程的主线程中移除负载。我很清楚 Spring 中的 ThreadPoolTaskExecutor 都有一个缓冲区和一个线程池。它是一种使用它的好方法,以及如何以 Java DSL 方式使用 ThreadPoolTaskExecutor?