骆驼 - “子路线”中的异常处理

Posted

技术标签:

【中文标题】骆驼 - “子路线”中的异常处理【英文标题】:Camel - Exception handling in 'sub routes' 【发布时间】:2011-11-16 10:50:43 【问题描述】:

Camel 显式处理两个“范围”的错误处理:

全球 每条路线

我遇到的问题是“子路线”中引发的异常。例如,我有这条路线:

from("direct:sendToWebservice").
    .processRef("massageBeforeSending").
    .to("http://webservice.com").
    .processRef("massageResponse");

那么我还有另外两条需要向网络服务发送消息的路由:

from(direct:fromSystemA").
    .errorHandler(deadLetterChannel("direct:TellSystemA")).
    .to("direct:sendToWebservice");

from(direct:fromSystemB").
    .errorHandler(deadLetterChannel("direct:TellSystemB")).
    .to("direct:sendToWebservice");

我希望发生的是,如果 web 服务路由抛出异常,它会传播到调用者,系统 A 或系统 B 都会收到通知。我没有办法实现这一目标。

我觉得这将是一个常见的用例 - 以前有没有人碰到过它?

再次感谢您的宝贵时间,

罗伊

【问题讨论】:

【参考方案1】:

从同事那里得到答案:子路由需要禁用它的错误处理:

from("direct:sendToWebservice").
    .errorHandler(noErrorHandler())     // disables error handling for this route
    .processRef("massageBeforeSending").
    .to("http://webservice.com").
    .processRef("massageResponse");

这会强制 Camel 将错误传播到调用路由。

【讨论】:

以上是关于骆驼 - “子路线”中的异常处理的主要内容,如果未能解决你的问题,请参考以下文章

java中的异常处理的基本结构

我想验证我的骆驼消费者应用程序是不是通过 junit 测试抛出特定异常

JAVA中的异常处理机制的原理

Java中的异常处理机制

C++中的异常处理

Java中的异常处理机制