【问题标题】:How to carry over header info to errorChannel?如何将标头信息传递到errorChannel?
【发布时间】:2015-08-03 02:32:43
【问题描述】:

在我的应用程序中,我的网关在标头中接收请求标识符,每当发生错误时,错误通道都会收到异常。但似乎,errorChannel 不会从网关获取标头。

是否也可以将标头信息传递到错误通道?

示例: sampleErrorChannel 中的 sysout 没有我通过的标头。

https://github.com/manojp1988/spring-integration/blob/master/javadsl/src/main/java/ErrorChannel/ErrorChannelExample.java

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    错误通道上的消息是ErrorMessage,它的有效负载为MessagingException,它有两个属性,cause(异常)和failedMessage。

    您可以通过这种方式访问​​失败的邮件标头。

    例如payload.failedMessage.headers['foo'] 使用 SpEL 时。

    如果在错误流上使用 POJO 服务激活器,可以使用

    public void failure(MessagingException failure) {
        MyHeader mh = failure.getFailedMessage().getHeader("mh");
    }
    

    【讨论】:

    • 我正在尝试将标题放入我的新邮件中,但我的线程一直在等待。如何使用 failedMessage 的标头丰富我的响应? headers = payload.getFailedMessage().getHeaders();消息 m = new GenericMessage(response, headers);
    • 不要那样做;您需要从错误流中保留正确的replyChannel 标头-旧的replyChannel 已用完并且没有人在听它。试试MessageBuilder.withPayload(payload).copyHeaders(errorMessage.getHeaders()).copyHeadersIfAbsent(failedMessage.getH‌​eaders()).build();。这应该保持正确的replyChannel 到位。或者,从失败的消息构建它并从 ErrorMessage 复制回 replyChannel 标头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多