次のSpring Integrationコンフィグレーションでは、MVCコントローラからゲートウェイメソッドを呼び出してコントローラを返すことができますが、統合フローはコントローラをブロックしない別のスレッド。Spring統合フローasyncでのエラー処理
しかし、この非同期フローでエラーハンドラを動作させる方法を理解できません。私のゲートウェイにはエラーチャンネルが定義されていますが、何らかの理由で例外が発生することはありません。代わりに、LoggingHandler
が呼び出されることがわかります。
@Bean
IntegrationFlow mainInteractiveFlow() {
return IntegrationFlows.from(
MessageChannels.executor("input", executor))
.split()
.channel(MessageChannels.executor(executor))
.transform(transformer)
.handle(genericMessageHandler, "validate")
.handle(genericMessageHandler, "checkSubscription")
.handle(interactiveMessageService, "handle")
.<Task, String>route(p -> p.getKind().name(),
m -> m.channelMapping(TaskKind.ABC.name(), "attachInteractiveChannel"))
.get();
}
@Bean
IntegrationFlow attachInteractiveChannelFlow() {
return IntegrationFlows.from(
MessageChannels.direct("attachInteractiveChannel"))
.handle(issueRouterService)
.get();
}
@Bean
IntegrationFlow interactiveExceptionChannelFlow() {
return IntegrationFlows.from(interactiveExceptionChannel())
.handle(errorHandler, "handleErrorMessage")
.get();
}
@Bean
MessageChannel interactiveExceptionChannel() {
return MessageChannels.direct("interactiveExceptionChannel").get();
}
ゲートウェイ:
@MessagingGateway(errorChannel = "interactiveExceptionChannel")
public interface InteractiveSlackGW {
@Gateway(requestChannel = "input")
void interactiveMessage(Collection<Request> messages);
}
私は私の例外は私のエラーハンドラによって処理される非同期統合の流れに起こって見るために何をすべき?
ああ、すべてを説明しています。ありがとう、ゲーリー。 –
'@GatewayHeader(name =" errorChannel "、expression =" @ interactiveExceptionChannel ")'のようなものを考えてみましょう。私はSpring Integration 5.0の中でこれがちょうどいいと思います。 –