从线性链中的先前流获取消息的方法

Way to get messages from previous flows in a linear chain

我最近遇到了如下情况:

Flow_A ------>  Flow_B ------>  Flow_C ------>  Flow_D

在哪里

所以,我想用旧消息增强 headers,然后再次传递到另一个流。但是,最后会很笨重。

我是否应该将消息存储在某处,然后在 header 中传递 messageId,以便下一个流程可以使用 messageId 获取旧消息?

实现此目标的最佳方法是什么?

查看索赔检查模式:https://docs.spring.io/spring-integration/docs/current/reference/html/message-transformation.html#claim-check

  1. 您使用 ClaimCheckInTransformer 存储消息并将其 id 作为输出负载。
  2. 您将此 id 移动到 header 中并生成下一条消息。
  3. 为第二条消息重复#1 和#2 步骤,以便为第三条消息做好准备。
  4. 依此类推,为第四条消息准备环境。

要恢复这些消息,您需要重复相反方向的过程。 从消息中获取 header 到 payload,将其删除并调用 ClaimCheckOutTransformer 以恢复存储的消息。我说 "remove header" 让堆栈正确恢复: ClaimCheckOutTransformer 有这样的逻辑:

AbstractIntegrationMessageBuilder<?> responseBuilder = getMessageBuilderFactory().fromMessage(retrievedMessage);
    // headers on the 'current' message take precedence
    responseBuilder.copyHeaders(message.getHeaders());

因此,在不删除 header 的情况下,相同的消息 ID 将被带入下一步,您将成为一个循环 - WhosebugError.

另一种是手动将消息存储在某个地方,例如MetadataStore 并在有效负载列表中收集它们的 ID。这样你就不需要额外的逻辑来处理 headers。有效负载列表中的所有内容。您可以随时咨询商店以获取该列表中的任何 id 商品!