【问题标题】:Apache-camel - custom error handlingApache-camel - 自定义错误处理
【发布时间】:2016-09-06 14:12:06
【问题描述】:

是否可以在 apache-camel 的错误处理程序之前实现一些开关?

类似:如果是 MyException.class,则使用默认错误处理程序,否则使用死信通道处理错误。

我尝试过使用,但似乎无法将其设置为全局设置,因为它必须在每个路由的方法 configure() 中设置。

【问题讨论】:

标签: java apache-camel


【解决方案1】:

是的,您可以使用通用错误处理程序。

在配置方法中我是这样做的:

public void configure() throws Exception {
  ExceptionBuilder.setup(this);
  ...
}

ExceptionBuilder 类如下所示:

public class ExceptionBuilder {

    public static void setup(RouteBuilder routeBuilder) {
      routeBuilder.onException(Exception.class).useOriginalMessage().handled(true).to("direct:errorHandler");
    }  
}

最后在错误处理程序中将其配置为您的要求。这意味着,将正文和标题保存到日志文件或将它们发送到 jms 队列或停止处理或其他任何事情。那取决于你。您只需配置一次并从所有 routeBuilder 类中引用它。

【讨论】:

    【解决方案2】:

    errorHandler 的全局范围仅限于每个 RouteBuilder 实例。您将需要创建一个基础 RouteBuilder 类,该类在其 configure() 方法中包含错误处理逻辑,然后从中扩展所有其他路由(不要忘记调用 super.configure())。

    您可以使用 errorHandler 的组合作为异常的包罗万象,具体的异常由 onException() 处理

    errorHandler(deadLetterChannel("mock:generalException"));
    
    onException(NullPointerException.class)
        .handled(true)
        .to("mock:specificException");
    

    任何带有这些处理程序的路由都会向端点“mock:specificException”发送抛出 NullPointerException 的交换。任何其他抛出的异常都将由errorHandler处理,交换将被发送到“mock:generalException”。

    http://camel.apache.org/error-handler.html

    http://camel.apache.org/exception-clause.html

    【讨论】:

      【解决方案3】:
      Use try-catch in camel route
      
      .doTry()
       .to("bean:<beanName>?method=<method>")
      .endDoTry()
      
      .doCatch(MyException.class)
       .to("bean:<beanName>?method=<method1>")
      .doCatch(Exception.class)
       .to("bean:<beanName>?method=<method2>")
      

      【讨论】:

      • 我需要一些通用的东西,我不应该为每条路线定义。总之谢谢
      【解决方案4】:

      解决方案: 我已将 DeadLetterChannelBuilder 用作错误处理程序,而 failureProcessor 和 deadLetterHandleNewException 为 false,这完成了我需要的检查(重新抛出异常/隐藏异常)。

      无论如何感谢您的建议,它引导我找到了正确的方法。

      【讨论】:

        猜你喜欢
        • 2020-10-26
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 2011-01-29
        • 2010-12-07
        • 1970-01-01
        相关资源
        最近更新 更多