如何在处理过程中引发异常的 Spring Integration 中路由消息?

Posted

技术标签:

【中文标题】如何在处理过程中引发异常的 Spring Integration 中路由消息?【英文标题】:How can I route messages in Spring Integration, which an exception was thrown during processing? 【发布时间】:2020-02-17 15:04:47 【问题描述】:

我有以下集成流程:

Integration Flow

如果在第二个拆分方法期间抛出异常,在解析器内部,我想将该消息引导到错误通道,这可能吗?

【问题讨论】:

【参考方案1】:

一种方法是将 spitter 的输出通道设置为 ExecutorChannelQueueChannel。这样,每个拆分的项目都将在单独的线程中处理。然后,您可以为这些异步通道应用任何可用的错误处理选项。 有关更多信息,请参阅文档:https://docs.spring.io/spring-integration/docs/5.2.0.RELEASE/reference/html/error-handling.html#error-handling

另一种方法是在第二个拆分器之后在下游使用.gateway() 及其errorChannel 选项,因此每个项目都将再次单独处理。

还可以在特定端点的下游使用ExpressionEvaluatingRequestHandlerAdvice(可能与RequestHandlerRetryAdvice一起)来处理其自身的异常:https://docs.spring.io/spring-integration/docs/5.2.0.RELEASE/reference/html/messaging-endpoints.html#message-handler-advice-chain

【讨论】:

修复了一个带有更多选项的答案,因为 discardChannel 不符合此要求。

以上是关于如何在处理过程中引发异常的 Spring Integration 中路由消息?的主要内容,如果未能解决你的问题,请参考以下文章

在春季批处理(spring-boot-1.5.2.RELEASE)中使用多个数据源在启动时引发异常

如何正确地在try / except块中引发异常

PL/SQL 引发处理异常

处理 Spring Boot 资源服务器中的安全异常

在Python语言中试图改变字符串的值会引发何种异常( )。

异常处理