1

在拆分器之后,处理消息时发生异常。我想处理该异常并将一条新消息定向到公共通道,该消息具有产生异常的该消息的相关 id 和一个指示错误的特殊标头。

我试过这样:

@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();
}

但聚合器返回此错误:

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。

有谁知道我做错了?提前致谢。

4

1 回答 1

1

到达错误通道的消息是ErrorMessage。它payload是(通常)MessagingException。反过来,那个人拥有failedMessage财产。

你需要的是这样的:

.<MessagingException>handle((p, h) -> MessageBuilder.fromMessage(p.getFailedMessage()).setHeader("ERROR", true).build())

您不需要复制标题,因为它们已经存在于failedMessage. ErrorMessage不关心(也不关心)标题,因为它只处理异常。

于 2017-07-26T13:52:15.287 回答