我们有一个弹簧集成应用程序,我们希望处理错误通道上的消息。我们至少要提取历史记录并记录它,以便我们可以看到它确实失败的地方等等。
以下是此位的简短标记
<int:poller id="defaultPoller" default="true" fixed-delay="5000" />
<int:channel id="MyCustomErrorChannel">
<int:queue capacity="10"/>
</int:channel>
<int:header-enricher id="errorMsg.HeaderEnricher"
input-channel="errorChannel"
output-channel="MyCustomErrorChannel">
<int:header name="history" expression="payload.failedMessage.headers" />
</int:header-enricher>
<int:service-activator input-channel="MyCustomErrorChannel" ref="errorLogger" method="logError"/>
<bean id="errorLogger" class="com.dataprep.util.ErrorLogger" />
我们的想法是定义我们的自定义错误频道 MyCustomErrorChannel 。在默认的errorChannel中出现的任何错误都会在 MyCustomErrorChannel 出现之前获得其标题的丰富 最后,我们有一个记录器,它从 MyCustomErrorChannel 中读取消息,并记录作为基础异常和历史记录的有效负载。
我注意到记录器中的历史记录始终是3个步骤 errorChannel,errorMsg.HeaderEnricher,pbSwiftRouterErrorChannel ,即此消息登陆errorChannel之前没有任何内容可在历史记录中获得。 如何获取原始消息的历史记录(即错误消息的历史记录,该消息以某种方式作为新的错误消息登陆到默认错误通道)
请问您看看我的标题是否更丰富,让我知道如何访问失败邮件的标题并将其填充到错误消息中?
它可以吗?
答案 0 :(得分:2)
要替换现有标头,您应该使用overwrite="true"
,因为history
也是为ErrorChannel
构建的。
您应该使用history
标题完全覆盖,而不是整个headers
。因此,你的表达必须是这样的:
<int:header name="history"
expression="payload.failedMessage.headers.history"
overwrite="true"/>