0

我在 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 中的 ThreadPoolTask​​Executor 都有一个缓冲区和一个线程池。它是一种使用它的好方法,以及如何以 Java DSL 方式使用 ThreadPoolTask​​Executor?

4

1 回答 1

0

有关于此事的ctor:

/**
 * 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) {

http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html#channel-configuration-pubsubchannel

使用 Java DSL,您可以像这样声明它:

@Bean
PublishSubscribeChannel publishSubscribeChannel(Executor executor) {
    return Channels.publishSubscribe(executor).get();
}
于 2017-06-13T13:41:45.230 回答