【发布时间】:2015-08-03 02:32:43
【问题描述】:
在我的应用程序中,我的网关在标头中接收请求标识符,每当发生错误时,错误通道都会收到异常。但似乎,errorChannel 不会从网关获取标头。
是否也可以将标头信息传递到错误通道?
示例: sampleErrorChannel 中的 sysout 没有我通过的标头。
【问题讨论】:
在我的应用程序中,我的网关在标头中接收请求标识符,每当发生错误时,错误通道都会收到异常。但似乎,errorChannel 不会从网关获取标头。
是否也可以将标头信息传递到错误通道?
示例: sampleErrorChannel 中的 sysout 没有我通过的标头。
【问题讨论】:
错误通道上的消息是ErrorMessage,它的有效负载为MessagingException,它有两个属性,cause(异常)和failedMessage。
您可以通过这种方式访问失败的邮件标头。
例如payload.failedMessage.headers['foo'] 使用 SpEL 时。
如果在错误流上使用 POJO 服务激活器,可以使用
public void failure(MessagingException failure) {
MyHeader mh = failure.getFailedMessage().getHeader("mh");
}
【讨论】:
MessageBuilder.withPayload(payload).copyHeaders(errorMessage.getHeaders()).copyHeadersIfAbsent(failedMessage.getHeaders()).build();。这应该保持正确的replyChannel 到位。或者,从失败的消息构建它并从 ErrorMessage 复制回 replyChannel 标头。