Apache Camel |自定义错误处理程序,用于控制每个异常的行为

时间:2014-05-06 10:17:49

标签: apache-camel

Apache Camel在上下文级别提供了两种错误处理方式: errorHandler onException

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

  

如果我收到IOException,我将以3秒的间隔进行3次重新传递尝试

     

如果我得到FileNotFoundException,我将以10秒的间隔进行5次重新传递尝试

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

所以,这里 onException 进入图片,这相当于驼峰上下文级别的try-catch。我可以用它来定义每个Exception行为。

我尝试使用带死信频道的自定义bean来试图控制来自bean的重新传递尝试。但是,Camel会在将控件传递给自定义bean之前尝试重新传递。

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


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

1 个答案:

答案 0 :(得分:2)

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

详情请见