如果我有休息服务,我肯定知道每个请求都由一个单独的线程处理,并且线程可以并行运行。
如果我在Spring集成中将rest(http)服务作为入站通道会发生什么情况。每个请求是否仍然会被并行处理,或者请求将被放入队列......它将更像是单线程
答案 0 :(得分:4)
普通通道(DirectChannel)使用与将某些东西放入通道的对象相同的执行线程(它们基本上是一种抽象方法调用的方式),因此它们是多线程的。
来自docs:
除了是最简单的点对点频道选项之外,还有一个 其最重要的功能是它允许单个线程 在频道的“双方”执行操作。例如,如果 处理程序订阅DirectChannel,然后发送消息 该通道将触发该处理程序的调用 handleMessage(Message)方法直接在发送者的线程中,之前 send()方法调用可以返回。
你的问题非常好。在通道中设置Queue元素时,spring会自动将其转换为QueueChannel(documentation),据我所知,只有一个线程能够在队列中消耗。如果你想要“真正的”队列语义(几个生产者和消费者线程)你可以使用ExecutorChannel
答案 1 :(得分:1)
使用Rest(http)时,线程由servlet容器管理;容器支持多个并发请求,但设置并发是在容器中完成的,而不是Spring Integration。
使用默认的Direct通道,容器线程将在容器线程上同时调用Spring Integration流程。