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 に答える