【问题标题】:How to send messages on a "side channel" in Spring XD?如何在 Spring XD 中的“侧通道”上发送消息?
【发布时间】:2016-04-07 08:54:08
【问题描述】:

我想实现这样的目标:

[Source] --> [Splitter] --B--> [Processor] --B-->  [Aggregator] ---> [Sink]
              |                                        ^
              |                                        |
              |--------------------C-------------------|

在几个包含业务逻辑的处理器之后, 一个特殊的生产者应该发出几个类型 B 的消息以及一个控制消息 C。

具有更多业务逻辑的处理器将处理这些消息。

聚合器应该“收集”所有结果以及控制消息。

控制消息基本上包含生成消息(B)的数量,因此聚合器可以知道是否

  1. B 的所有预期消息都已到达
  2. 发生超时

我知道,聚合器可以通过使用消息头来推断从拆分器中预期的消息数量,但是如果没有消息到达它也会超时吗?

一般来说:是否可以让 Transformer 具有多个输入或输出通道?

【问题讨论】:

    标签: java spring spring-integration spring-xd


    【解决方案1】:

    2 先 -

    标准聚合器模块有一个timeout 参数(默认为 50 秒)。

    它是通过每超时秒运行的消息组存储收割器实现的 - 因此实际超时将高达 2 x timeout 平均为 1.5 x timeout

    聚合器现在有一个group-timeout 属性,它比使用reapear 更准确;它需要一个自定义聚合器处理器来使用它。它还有一个group-timeout-expression,因此超时可能会根据运行时条件(例如当前组大小)而有所不同。

    现在 1 -

    没有将边带数据从一个模块发送到另一个模块的标准机制。通常,模块之间通过设置消息头进行通信。这就是标准拆分器向聚合器发送信息的方式(sequenceNumbersequenceSize 标头)。

    您可以使用自定义 ReleaseStrategy 创建自定义聚合器处理器以使用其他标头。

    一般来说:是否可以让 Transformer 具有多个输入或输出通道?

    不支持 XD,但后续项目 (spring-cloud-stream) 支持将多个输入/输出绑定到应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-27
      • 2019-01-14
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 2015-09-03
      • 2021-02-19
      • 2013-06-27
      相关资源
      最近更新 更多