将来自不同线程的多个通道的消息发送到Spring Integration中的单个通道

时间:2014-10-06 03:07:26

标签: java multithreading spring spring-integration

我有一个接受来自多个来源的数据的系统。客户端(我无法控制的第三方客户端)处理线程池中的所有数据源。我可以注册回调,并且将从不同的线程触发回调。我正在使用网关将数据发送到单独的通道。处理完每个频道后,我想将每个频道转换为单个频道的消息。这是因为来自不同来源的数据的大多数处理都是相同的。 以下是xml示例

<gateway default-request-channel="a" />
<channel id='a'/> 
<gateway default-request-channel="b" />
<channel id='b'/> 
<!-- inputs to a and b can be from different threads -->
<channel id='c' />

<transformer input-channel="a" output-channel="c" />
<transformer input-channel="b" output-channel="c" />

<outbound-channel-adapter channel="c" />

当两个变换器输出到同一个通道时,变换器在不同的线程上运行会不会出现并发问题? 是否可以只有一个线程处理通道'c'?否则,在同一个通道中处理多个线程的推荐做法是什么?

1 个答案:

答案 0 :(得分:-1)

框架中没有这样的并发问题 - 但是,您的代码(由服务激活器等调用)必须是线程安全的。

如果出站通道适配器调用您的POJO,它必须是线程安全的。如果它是框架适配器(例如http等),则它是线程安全的。

如果您无法使代码线程安全,则可以使用Executor Channel通道cconfig here)与单个线程任务执行程序来运行流程单线程。