首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache-camel -自定义错误处理

Apache-camel -自定义错误处理
EN

Stack Overflow用户
提问于 2016-09-06 14:12:06
回答 4查看 5.7K关注 0票数 2

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

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

我已经尝试过使用,但似乎不能在全局上设置它,因为它必须在每个路由的方法配置()中设置。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-07 12:57:09

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

不管怎样,谢谢你的建议,这让我找到了正确的方向。

票数 0
EN

Stack Overflow用户

发布于 2016-09-06 21:25:48

是的,您可以有一个通用错误处理程序。

在配置方法中,我这样做了:

代码语言:javascript
复制
public void configure() throws Exception {
  ExceptionBuilder.setup(this);
  ...
}

ExceptionBuilder类如下所示:

代码语言:javascript
复制
public class ExceptionBuilder {

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

最后,在错误处理程序中,将其配置为您的需求。这意味着,保存主体和头部以记录文件,或将它们发送到jms队列或停止处理或其他任何操作。那就看你的了。您只需配置它一次,并从所有routeBuilder类中引用它。

票数 1
EN

Stack Overflow用户

发布于 2016-09-07 05:00:32

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

您可以使用errorHandler的组合作为异常的catch,并使用onException()处理的特定异常。

代码语言:javascript
复制
errorHandler(deadLetterChannel("mock:generalException"));

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

使用这些处理程序的任何路由都将发送将NullPointerException抛出到端点"mock:specificException“的交换。引发的任何其他异常都将由errorHandler处理,并且交换将被发送到"mock:generalException“。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39351181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档