Spring集成错误处理 - 如何访问原始错误消息的历史记录?

时间:2016-04-20 20:36:28

标签: error-handling spring-integration

我们有一个弹簧集成应用程序,我们希望处理错误通道上的消息。我们至少要提取历史记录并记录它,以便我们可以看到它确实失败的地方等等。

以下是此位的简短标记

<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之前没有任何内容可在历史记录中获得。 如何获取原始消息的历史记录(即错误消息的历史记录,该消息以某种方式作为新的错误消息登陆到默认错误通道)

请问您看看我的标题是否更丰富,让我知道如何访问失败邮件的标题并将其填充到错误消息中?

它可以吗?

1 个答案:

答案 0 :(得分:2)

  1. 要替换现有标头,您应该使用overwrite="true",因为history也是为ErrorChannel构建的。

  2. 您应该使用history标题完全覆盖,而不是整个headers。因此,你的表达必须是这样的:

    <int:header name="history"
                expression="payload.failedMessage.headers.history"
                overwrite="true"/>