Apache camel 使用并行处理的路由异常
我有三个“级别”的路线:Apache camel 使用并行处理的路由异常,apache-camel,Apache Camel,我有三个“级别”的路线: direct:start是一条简单的路线,它“调用”direct:middle 直接:中间有多播/并行处理,调用另外两个 其他两条路由(第三级)都抛出异常 此示例强制这两个最低级别的路由抛出异常。 当按如下方式编码时,我看到两个异常(如onException()中所示打印) } 我UN-在“direct:middle”中对noErrorHandler()进行了注释,认为它可能仍然运行onException(),但只给出一个异常。 相反,它的行为就像在RouteBui
- direct:start是一条简单的路线,它“调用”direct:middle
- 直接:中间有多播/并行处理,调用另外两个
- 其他两条路由(第三级)都抛出异常
DefaultErrorHandler
,其行为是:
默认情况下,将传播路由过程中引发的任何异常
返回调用者,交换立即结束
那是真的……只要你在同一条路线上!
如果您想将子例程(“direct:middle”)中的异常传播回调用路由(“direct:start”),您确实需要引入一个:
.errorHandler(noErrorHandler() )
现在,对于multicast/split/recipientList EIP,不要忘记它们正在处理原始Exchange的副本。副本上的任何错误都不会影响“主”交换。如果需要此功能,请激活“shareUnitOfWork”(或实施智能聚合策略,将子交换上的潜在异常聚合为唯一异常)问题是,当我将errorHandler(noErrorHandler())添加到“direct:middle”时,它会向上传播,但是:我希望它能够按照onException()中的定义进行错误处理。。。在RouteBuilder级别。我很好奇为什么它不这么做。相反,它将异常一直抛出到触发最外层路由的位置。
.errorHandler(noErrorHandler() )