从线性链中的先前流获取消息的方法
Way to get messages from previous flows in a linear chain
我最近遇到了如下情况:
Flow_A ------> Flow_B ------> Flow_C ------> Flow_D
在哪里
- Flow_A是发起者,应该传递messageA。
- Flow_B 应该传递 messageA+messageB。
- Flow_C 应该传递 messageA+messageB+messageC
- Flow_D 应该传递 messageA+messageB+messageC+messageD。
所以,我想用旧消息增强 headers,然后再次传递到另一个流。但是,最后会很笨重。
我是否应该将消息存储在某处,然后在 header 中传递 messageId,以便下一个流程可以使用 messageId 获取旧消息?
实现此目标的最佳方法是什么?
- 您使用
ClaimCheckInTransformer
存储消息并将其 id
作为输出负载。
- 您将此
id
移动到 header 中并生成下一条消息。
- 为第二条消息重复#1 和#2 步骤,以便为第三条消息做好准备。
- 依此类推,为第四条消息准备环境。
要恢复这些消息,您需要重复相反方向的过程。
从消息中获取 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 商品!
我最近遇到了如下情况:
Flow_A ------> Flow_B ------> Flow_C ------> Flow_D
在哪里
- Flow_A是发起者,应该传递messageA。
- Flow_B 应该传递 messageA+messageB。
- Flow_C 应该传递 messageA+messageB+messageC
- Flow_D 应该传递 messageA+messageB+messageC+messageD。
所以,我想用旧消息增强 headers,然后再次传递到另一个流。但是,最后会很笨重。
我是否应该将消息存储在某处,然后在 header 中传递 messageId,以便下一个流程可以使用 messageId 获取旧消息?
实现此目标的最佳方法是什么?
- 您使用
ClaimCheckInTransformer
存储消息并将其id
作为输出负载。 - 您将此
id
移动到 header 中并生成下一条消息。 - 为第二条消息重复#1 和#2 步骤,以便为第三条消息做好准备。
- 依此类推,为第四条消息准备环境。
要恢复这些消息,您需要重复相反方向的过程。
从消息中获取 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 商品!