是否可以在apache-camel的错误处理程序之前实现一些交换机?
类似于:如果是MyException.class,那么使用默认的错误处理程序,否则使用死信通道来处理错误。
我已经尝试过使用,但似乎不能在全局上设置它,因为它必须在每个路由的方法配置()中设置。
发布于 2016-09-07 12:57:09
解决方案:我使用DeadLetterChannelBuilder作为错误处理程序,failureProcessor和deadLetterHandleNewException作为false,这完成了我所需要的检查(重新抛出异常/隐藏异常)。
不管怎样,谢谢你的建议,这让我找到了正确的方向。
发布于 2016-09-06 21:25:48
是的,您可以有一个通用错误处理程序。
在配置方法中,我这样做了:
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类中引用它。
发布于 2016-09-07 05:00:32
errorHandler的全局范围仅限于每个RouteBuilder实例。您将需要创建一个基类,该类在它的配置()方法中包含错误处理逻辑,然后从它扩展所有其他路由(不要忘记调用super.configure())。
您可以使用errorHandler的组合作为异常的catch,并使用onException()处理的特定异常。
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
https://stackoverflow.com/questions/39351181
复制相似问题