如何在异常流中引导保存当前关联 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 因为它只处理异常。