如何在"侧通道上发送消息"在Spring XD?

时间:2016-04-07 08:54:09

标签: java spring spring-integration spring-xd

我想要达到这样的目标:

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

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

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

聚合器应该"收集"所有结果以及控制信息。

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

  1. 所有预期的B消息已经到达
  2. 发生了超时
  3. 我知道,聚合器可以通过使用消息头来推断出从分割器中获得的消息数量,但如果没有消息到达它,它也会超时吗?

    一般来说:变形金刚是否可以有多个输入或输出通道?

1 个答案:

答案 0 :(得分:1)

2首先 -

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

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

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

现在1 -

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

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

  

一般来说:变形金刚是否可以有多个输入或输出通道?

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