[Splitter] --B--> [Processor] --B--> [Aggregator] ---> [Sink] -6ren">
gpt4 book ai didi

java - 如何在 Spring XD 中向 "side channel"发送消息?

转载 作者:行者123 更新时间:2023-11-30 07:28:39 26 4
gpt4 key购买 nike

我想实现这样的目标:

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

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

具有进一步业务逻辑的处理器将处理这些消息。

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

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

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

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

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

最佳答案

第 2 个 -

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

它是通过消息组存储收割机实现的,该消息组存储收割机每隔超时秒运行一次 - 因此实际超时将高达 2 x 超时,平均为 1.5 x 超时 .

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

现在 1 -

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

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

Generally speaking: is it possible to have Transformers with more than one input or output channel?

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

关于java - 如何在 Spring XD 中向 "side channel"发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36471227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com