Spring 集成 MessagePublishingErrorHandler 未被调用



我正在尝试将异常发布到特定的错误通道。 我使用相同的MessagePublishingErrorHandler

但是我的错误没有路由到我创建的频道。

这是我的代码:-

渠道:-

@Bean(value = "appErrorChannel")
public PublishSubscribeChannel appErrorChannel() {
return new PublishSubscribeChannel();
}

消息处理程序:

@Bean
public MessagePublishingErrorHandler myMessagePublishingErrorHandler(@Qualifier("appErrorChannel") PublishSubscribeChannel errChannel) {
MessagePublishingErrorHandler messagePublishingErrorHandler = new MessagePublishingErrorHandler();
messagePublishingErrorHandler.setDefaultErrorChannel(errChannel);
return messagePublishingErrorHandler;
}

从此频道转移:-

@Bean
public IntegrationFlow errorFlow(@Qualifier("appErrorChannel") PublishSubscribeChannel errChannel) {
return flow -> flow.channel(errChannel).
publishSubscribeChannel(spec -> spec
.subscribe(f1 -> f1.handle(m -> System.out.println("******************* "+ m.getPayload()))));
}

我的原始频道。act方法引发异常:-

@Bean
public IntegrationFlow pubSubFlow(PublishSubscribeChannel publishSubscribeChannel, 
@Qualifier("myMessagePublishingErrorHandler")
MessagePublishingErrorHandler messagePublishingErrorHandler) {
return flow -> flow.channel(publishSubscribeChannel).split()
.channel(new ExecutorSubscribableChannel(Executors.newFixedThreadPool(1)))
.publishSubscribeChannel(config -> config
.subscribe(f1 -> f1.handle("action", "act")
.handle(m1 -> {System.out.println(">>>"+m1);}))
.errorHandler(messagePublishingErrorHandler)
);
}
errorHandler

只与PublishSubscribeChannel中的taskExecutor一起使用的问题。否则,它只会被忽略。我们可能需要在初始化期间PublishSubscribeChannelWARN这个问题。请随时就此事提出 JIRA。

作为解决方法,您可以执行以下操作:

.publishSubscribeChannel(new SyncTaskExecutor(), config -> config

这样,您仍然在同一个调用线程中,但是Runnable.run()将真正包装到try...catch(),并且ErrorMessage将发布到您的appErrorChannel

相关内容

  • 没有找到相关文章

最新更新