【发布时间】:2014-06-11 14:16:52
【问题描述】:
我想了解 Spring Integration 中如何处理消息:串行或并行。特别是我有一个带有轮询器和 HTTP 出站网关的入站通道适配器。我猜拆分器、转换器、标头丰富器等不会产生自己的线程。
我可能会错过它们,但这些细节是否在文档中的某处指定?
我还可以通过编程方式获取系统中的所有频道吗?
【问题讨论】:
标签: java spring spring-integration
我想了解 Spring Integration 中如何处理消息:串行或并行。特别是我有一个带有轮询器和 HTTP 出站网关的入站通道适配器。我猜拆分器、转换器、标头丰富器等不会产生自己的线程。
我可能会错过它们,但这些细节是否在文档中的某处指定?
我还可以通过编程方式获取系统中的所有频道吗?
【问题讨论】:
标签: java spring spring-integration
频道类型为described here。
默认通道类型为Direct(端点运行在调用者的线程上); QueueChannel 和 ExcecutorChannel 提供异步操作。
context.getBeansOfType(MessageChannel.class)
【讨论】:
其实“线程”取决于MessageChannel类型:
例如DirectChannel (<channel id="foo"/> - 默认配置) 不对线程做任何事情,只是将消息从 send 转移到订阅者来处理它。如果处理程序是AbstractReplyProducingMessageHandler,它会将其结果发送到outputChannel,如果最后一个也是DirectChannel,则工作在同一个线程中完成。
另一个样本是关于您的inbound channel adapter。在后台有一个计划任务,它在 Scheduler 线程中执行,如果您的轮询非常频繁,则下一个轮询任务可能会在新线程中执行。
QueueChannel 可以接受最后一条“规则”:他们的handle 工作也是通过调度程序线程完成的。
ExcecutorChannel 只是将handle 任务放到Executor。
您可以在 Gary Russell 在他的回答中提供的参考手册中找到所有其他信息。
【讨论】: