Spring云|收集来自多个目的地的响应

Spring Cloud | Gather response from multiple destinations

我在想 Spring Cloud Stream 是否适合我们正在考虑构建的特定系统。目前有一个正在使用的 Monolith (ESB),但我们希望从微服务的优点中受益(尤其是 spring 云生态系统)。

我们以 5 requests/second 的速率从输入源(具体来说是 JMS 队列,ActiveMQ)接收请求。

我们需要有不同的路由规则(基于负载或一些派生逻辑)并将消息路由到不同的输出目的地(比如 A、B、C)。输出目的地是 JMS 队列。

最后,我们必须接收来自 A、B、C 的 3 个响应(通过侦听不同的队列集)并混合最终响应。这个响应最终被分派到另一个输出通道(这是另一个 JMS 队列)。

有一些极端情况,例如当 A 的响应时间超过“5”秒时,我们将希望混合 'B' 和 'C' 的响应以及'A' 的错误对象。 'B' 和 'C' 也是如此。

此外,目的地 'A'、'B' 和 'C' 是动态的。将来我们可以有更多的目标系统 'D'、'E' 等。我们希望在引入新系统时不必更改主编排层。

Spring Cloud Stream 是正确的选择吗?我正在寻找更具体的指针,以防聚合来自多个 JMS 队列(带有超时)的响应并混合响应。

你所说的对于 Aggregator EIP or its more powerful friend Scatter-Gather 来说已经足够了。

它们都在 Spring 集成中可用:

因此,您需要一些 correlationKey 才能收集到同一组的所有回复以最终汇总。

还有 group-timeout 选项,允许您在一段时间后没有所有回复时释放组。