Java 使用索赔检查模式在有效负载中保留一些信息?
我正在读关于Spring集成的模式 使用此模式时,听起来好像整个有效负载都放在了消息存储中,而得到的有效负载只是声明检查id Spring是否提供了一种简单的方法来将有效负载存储在消息存储中,同时保留有效负载的特定部分?您是否需要首先使用标头enricher并在标头中存储要访问的属性 例如,假设我的有效负载是一个简单的XML文档:Java 使用索赔检查模式在有效负载中保留一些信息?,java,spring,spring-integration,Java,Spring,Spring Integration,我正在读关于Spring集成的模式 使用此模式时,听起来好像整个有效负载都放在了消息存储中,而得到的有效负载只是声明检查id Spring是否提供了一种简单的方法来将有效负载存储在消息存储中,同时保留有效负载的特定部分?您是否需要首先使用标头enricher并在标头中存储要访问的属性 例如,假设我的有效负载是一个简单的XML文档: 1234432156788765 5799 我想声明检查此有效负载,但仍保留对有效负载或元素的访问权。使用当前的Spring集成组件如何做到这一点?索赔检查的主要
1234432156788765
5799
我想声明检查此有效负载,但仍保留对
有效负载或元素的访问权。使用当前的Spring集成组件如何做到这一点?索赔检查的主要目的是存储消息,而不必担心消息的大小,因为消息可能会通过多个外部系统传输。它也可以在系统故障后恢复
现实世界中最好的例子就是飞行行李。在转车过程中,您手中只有收据,并在最后拿到行李
为了实现您的目标,我建议您使用
:
这样您就不会丢失原始的有效载荷
,并且在标题中有索赔检查id
注意:Claim Check存储整个带有标题的消息
,而不仅仅是有效负载
。相关代码来自org.springframework.integration.transformer.ClaimCheckInTransformer
:
@覆盖
受保护对象DotTransform(消息)引发异常{
Assert.notNull(消息,“消息不能为null”);
对象负载=message.getPayload();
notNull(有效载荷,“有效载荷不得为空”);
Message storedMessage=this.messageStore.addMessage(消息);
MessageBuilder responseBuilder=MessageBuilder.withPayload(storedMessage.getHeaders().getId());
//“当前”消息的标题优先
copyHeaders(message.getHeaders());
返回responseBuilder.build();
}
因此,即使在通过索赔签入后,所有标题也会保留下来
?是的。正确:这可能是另一个选择,如何保留您的有效负载。或者在声明签入后保留——只是将其移动到之前的标题。感谢您的编辑。现在我知道了如何用具体的语言来显示代码,这也提高了我的英语水平。