弹簧集成通道单线程?

时间:2013-07-26 07:18:29

标签: java multithreading spring spring-integration

如果我有休息服务,我肯定知道每个请求都由一个单独的线程处理,并且线程可以并行运行。

如果我在Spring集成中将rest(http)服务作为入站通道会发生什么情况。每个请求是否仍然会被并行处理,或者请求将被放入队列......它将更像是单线程

2 个答案:

答案 0 :(得分:4)

普通通道(DirectChannel)使用与将某些东西放入通道的对象相同的执行线程(它们基本上是一种抽象方法调用的方式),因此它们是多线程的。

来自docs

  

除了是最简单的点对点频道选项之外,还有一个   其最重要的功能是它允许单个线程   在频道的“双方”执行操作。例如,如果   处理程序订阅DirectChannel,然后发送消息   该通道将触发该处理程序的调用   handleMessage(Message)方法直接在发送者的线程中,之前   send()方法调用可以返回。


修改

你的问题非常好。在通道中设置Queue元素时,spring会自动将其转换为QueueChannel(documentation),据我所知,只有一个线程能够在队列中消耗。如果你想要“真正的”队列语义(几个生产者和消费者线程)你可以使用ExecutorChannel

答案 1 :(得分:1)

使用Rest(http)时,线程由servlet容器管理;容器支持多个并发请求,但设置并发是在容器中完成的,而不是Spring Integration。

使用默认的Direct通道,容器线程将在容器线程上同时调用Spring Integration流程。