Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 使用并行处理的路由异常_Apache Camel - Fatal编程技术网

Apache camel 使用并行处理的路由异常

Apache camel 使用并行处理的路由异常,apache-camel,Apache Camel,我有三个“级别”的路线: direct:start是一条简单的路线,它“调用”direct:middle 直接:中间有多播/并行处理,调用另外两个 其他两条路由(第三级)都抛出异常 此示例强制这两个最低级别的路由抛出异常。 当按如下方式编码时,我看到两个异常(如onException()中所示打印) } 我UN-在“direct:middle”中对noErrorHandler()进行了注释,认为它可能仍然运行onException(),但只给出一个异常。 相反,它的行为就像在RouteBui

我有三个“级别”的路线:

  • direct:start是一条简单的路线,它“调用”direct:middle
  • 直接:中间有多播/并行处理,调用另外两个
  • 其他两条路由(第三级)都抛出异常
此示例强制这两个最低级别的路由抛出异常。 当按如下方式编码时,我看到两个异常(如onException()中所示打印)

}

UN-在“direct:middle”中对noErrorHandler()进行了注释,认为它可能仍然运行onException(),但只给出一个异常。 相反,它的行为就像在RouteBuilder中没有指定OneException(),将异常一直抛出回调用方

我很想了解它为什么会这样。 我尝试使用doTry()。。。doCatch()在最外面的路线上,这似乎有效,但我不确定为什么另一种方法不起作用。

你是对的。 我得出的结论和你一样(几年前,但我认为它没有改变)。事实上,错误/异常处理(更不用说传播)是Camel中最令人困惑的事情(可能是强大的,但也是最令人困惑的)

根据文档,在路由中指定无错误处理程序将使路由隐式使用
DefaultErrorHandler
,其行为是:

默认情况下,将传播路由过程中引发的任何异常 返回调用者,交换立即结束

那是真的……只要你在同一条路线上! 如果您想将子例程(“direct:middle”)中的异常传播回调用路由(“direct:start”),您确实需要引入一个:

.errorHandler(noErrorHandler() )

现在,对于multicast/split/recipientList EIP,不要忘记它们正在处理原始Exchange的副本。副本上的任何错误都不会影响“主”交换。如果需要此功能,请激活“shareUnitOfWork”(或实施智能聚合策略,将子交换上的潜在异常聚合为唯一异常)

问题是,当我将errorHandler(noErrorHandler())添加到“direct:middle”时,它会向上传播,但是:我希望它能够按照onException()中的定义进行错误处理。。。在RouteBuilder级别。我很好奇为什么它不这么做。相反,它将异常一直抛出到触发最外层路由的位置。
.errorHandler(noErrorHandler() )