我最近遇到了一个类似下面的情况。
Flow_A ------> Flow_B ------> Flow_C ------> Flow_D
哪里
所以,我在想用一个旧的消息增强头,再传给另一个流。但是,到最后会很笨重。
我是否应该将消息存储在某个地方,然后在头中传递消息ID,这样下一个流就可以得到带有消息ID的旧消息?
应该用什么方法来实现呢?
ClaimCheckInTransformer
而得其 id
作为输出有效载荷。id
到头,并产生下一个消息。要恢复这些消息,你需要重复相反的过程。payload
移除它,并调用 ClaimCheckOutTransformer
来恢复存储的消息。我说 "删除头 "是为了让堆栈能够正确地恢复到:的。ClaimCheckOutTransformer
有一个这样的逻辑。
AbstractIntegrationMessageBuilder<?> responseBuilder = getMessageBuilderFactory().fromMessage(retrievedMessage);
// headers on the 'current' message take precedence
responseBuilder.copyHeaders(message.getHeaders());
所以,如果不去掉那个头,同样的信息ID就会被带入下一步,而你将会是一个循环 - StackOverflowError
.
另一种是手动将消息存储在某个地方,比如说。MetadataStore
并在有效载荷列表中收集它们的id。这样你就不需要额外的逻辑来处理报头。一切都在你的有效载荷列表中。你可以在任何时候查询存储在该列表中的任何id项!