【问题标题】:Spring Integration - channels and threadsSpring Integration - 通道和线程
【发布时间】:2014-06-11 14:16:52
【问题描述】:

我想了解 Spring Integration 中如何处理消息:串行或并行。特别是我有一个带有轮询器和 HTTP 出站网关的入站通道适配器。我猜拆分器、转换器、标头丰富器等不会产生自己的线程。

我可能会错过它们,但这些细节是否在文档中的某处指定?

我还可以通过编程方式获取系统中的所有频道吗?

【问题讨论】:

    标签: java spring spring-integration


    【解决方案1】:

    频道类型为described here

    默认通道类型为Direct(端点运行在调用者的线程上); QueueChannelExcecutorChannel 提供异步操作。

    context.getBeansOfType(MessageChannel.class)

    【讨论】:

      【解决方案2】:

      其实“线程”取决于MessageChannel类型:

      例如DirectChannel (<channel id="foo"/> - 默认配置) 不对线程做任何事情,只是将消息从 send 转移到订阅者来处理它。如果处理程序是AbstractReplyProducingMessageHandler,它会将其结果发送到outputChannel,如果最后一个也是DirectChannel,则工作在同一个线程中完成。

      另一个样本是关于您的inbound channel adapter。在后台有一个计划任务,它在 Scheduler 线程中执行,如果您的轮询非常频繁,则下一个轮询任务可能会在新线程中执行。

      QueueChannel 可以接受最后一条“规则”:他们的handle 工作也是通过调度程序线程完成的。

      ExcecutorChannel 只是将handle 任务放到Executor

      您可以在 Gary Russell 在他的回答中提供的参考手册中找到所有其他信息。

      【讨论】:

        最近更新 更多