如何在异常流中引导保存当前关联 ID 的新消息
How to guide a new message that holds the current correlation id in an exception flow
splitter后,处理消息时出现异常。我想处理该异常并将一条新消息定向到公共通道,该消息具有产生异常的该消息的相关 ID 和一个指示错误的特殊 header。
我试过这样:
@Bean
public IntegrationFlow socialMediaErrorFlow() {
return IntegrationFlows.from("socialMediaErrorChannel")
.wireTap(sf -> sf.handle("errorService", "handleException"))
.handle((p, h) -> MessageBuilder.withPayload(p).copyHeaders(h).setHeader("ERROR", true).build())
.channel("directChannel_2")
.get();
}
但是聚合器returns出现这个错误:
MessageHandlingException: error occurred in message handler [org.springframework.integration.dsl.AggregatorSpec$InternalAggregatingMessageHandler#0]; nested exception is java.lang.IllegalStateException: Null correlation not allowed. Maybe the CorrelationStrategy is failing?
我无法复制消息中的关联 ID header。
有谁知道我做错了吗?提前致谢。
到达错误通道的消息是ErrorMessage
。它的 payload
是(通常)MessagingException
。反过来,那个有 failedMessage
属性.
你需要的是这样的:
.<MessagingException>handle((p, h) -> MessageBuilder.fromMessage(p.getFailedMessage()).setHeader("ERROR", true).build())
您不需要复制 headers,因为它们已经存在于 failedMessage
中。 ErrorMessage
不关心(也不能)关心 headers 因为它只处理异常。
splitter后,处理消息时出现异常。我想处理该异常并将一条新消息定向到公共通道,该消息具有产生异常的该消息的相关 ID 和一个指示错误的特殊 header。
我试过这样:
@Bean
public IntegrationFlow socialMediaErrorFlow() {
return IntegrationFlows.from("socialMediaErrorChannel")
.wireTap(sf -> sf.handle("errorService", "handleException"))
.handle((p, h) -> MessageBuilder.withPayload(p).copyHeaders(h).setHeader("ERROR", true).build())
.channel("directChannel_2")
.get();
}
但是聚合器returns出现这个错误:
MessageHandlingException: error occurred in message handler [org.springframework.integration.dsl.AggregatorSpec$InternalAggregatingMessageHandler#0]; nested exception is java.lang.IllegalStateException: Null correlation not allowed. Maybe the CorrelationStrategy is failing?
我无法复制消息中的关联 ID header。
有谁知道我做错了吗?提前致谢。
到达错误通道的消息是ErrorMessage
。它的 payload
是(通常)MessagingException
。反过来,那个有 failedMessage
属性.
你需要的是这样的:
.<MessagingException>handle((p, h) -> MessageBuilder.fromMessage(p.getFailedMessage()).setHeader("ERROR", true).build())
您不需要复制 headers,因为它们已经存在于 failedMessage
中。 ErrorMessage
不关心(也不能)关心 headers 因为它只处理异常。