我想了解如何在Spring Integration中处理消息:串行或并行。特别是我有一个带有轮询器和HTTP出站网关的入站通道适配器。我认为分离器,变换器,标题集合器等不会产生它们自己的线程。
我本可以错过它们,但这些细节是否在文档的某处指定了?
我也可以以编程方式获取系统中的所有频道吗?
答案 0 :(得分:4)
频道类型为described here。
默认频道类型为Direct
(端点在呼叫者的线程上运行); QueueChannel
和ExcecutorChannel
提供异步操作。
context.getBeansOfType(MessageChannel.class)
答案 1 :(得分:4)
实际上“线程化”依赖于MessageChannel
类型:
E.g。 DirectChannel
(<channel id="foo"/>
- 默认配置)不对线程执行任何操作,只是将消息从send
转移到订阅者处理它。如果处理程序是AbstractReplyProducingMessageHandler
,它将结果发送到outputChannel
,如果最后一个是DirectChannel
,则工作在同一个线程内完成。
另一个示例是关于您的inbound channel adapter
。在后台有一个计划任务,它在Scheduler线程中执行,如果你的轮询很常见,下一轮询任务可能会在新线程中执行。
QueueChannel
可接受最后一条“规则”:他们的handle
工作也是使用Scheduler线程完成的。
ExcecutorChannel
只需将handle
任务放到Executor
。
您可以在Gary Russell在他的回答中提供的参考手册中找到所有其他信息。