5

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

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

4

2 回答 2

4

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

文档

除了作为最简单的点对点通道选项之外,它最重要的特性之一是它允许单个线程在通道的“两侧”执行操作。例如,如果一个处理程序订阅了 DirectChannel,那么在 send() 方法调用可以返回之前,将消息发送到该通道将直接在发送方的线程中触发该处理程序的 handleMessage(Message) 方法的调用。


编辑

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

于 2013-07-26T07:20:02.893 回答
2

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

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

于 2013-07-26T11:40:17.927 回答