apache-camel - Apache Camel |自定义错误处理程序以控制每个异常的行为

标签 apache-camel

Apache Camel 提供了两种在上下文级别进行错误处理的方法:errorHandleronException

我正在寻找一种能够在一种配置中提供两全其美的解决方案。 我想要的是我应该配置一个错误处理程序(可能是自定义的)并且在该自定义错误处理程序中,我应该能够控制每个异常的行为 例如:

if I get IOException, I would make 3 redelivery attempts at an interval of 3 seconds

if I get FileNotFoundException, I would make 5 redelivery attempts at an interval of 10 seconds

errorHandler 将使我能够使用提供的错误处理程序之一,并以类似的方式处理所有异常。例如,使用这种方法我不能对不同的异常进行不同的重新传递尝试。

因此,这里出现了 onException,这相当于 camel 上下文级别的 try-catch。我可以使用它来定义每个异常行为。

我尝试将自定义 bean 与死信 channel 一起使用,以试图控制 bean 的重新传递尝试。但是,Camel 在将控制传递给自定义 bean 之前会尝试重新传递。

关于实现我想要的解决方案的任何想法。


在寻求更清晰的第一组评论后进行编辑: 我知道 onException 的这个特性。路由会抛出不同类型的异常。一旦系统上线,新的异常也会随着新的路由/处理器/转换器的开发而添加。如果我使用 onException,那么我(或开发人员)必须指定它们中的每一个。 (我不想使用 onException(Exception.class) 方法。) 因此,这将需要向上下文添加更多 onException 子句,将新异常添加到系统中。此外,某些异常可能需要特殊处理。我不想依赖开发人员进行错误处理。所以,我正在寻找基于自定义错误处理程序的通用解决方案。这将帮助我保持配置简单,因为我必须在上下文中仅指定一个错误处理程序。这个错误处理程序可以从 JMX 控制台进行管理,并为我提供了以自定义方式处理任何异常的灵 active 。

最佳答案

您可以使用 onException(Exception.class).onWhen(predicate) 然后使用 java 方法调用作为返回 true 或 false 的谓词。然后,您可以使用 java 代码来触发 onException 是否应该使用react。

查看更多详细信息

关于apache-camel - Apache Camel |自定义错误处理程序以控制每个异常的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23491928/

相关文章:

java - Apache Camel : Proxy code

java - 从 service-mix 文件轮询器迁移到 apache Camel 文件轮询器

java - Netty Camel 示例

java - 使用 Apache Camel 和 Spring,我可以使用属性构建 uri 吗?

java - Camel : Ignore some messages in mock endpoint

java - 使用 JPA 持久化实体时面临的问题

java - 在 Camel 2.12 中禁用 camel 证书验证

java - Apache Camel - 仅当队列大小大于时才使用消息

java - 如何在没有soapaction header 验证的情况下在camel中创建cxf端点?

java - Camel smb ://- consuming a lot of files from one folder