骆驼:如何强制enrich()不调用aggregate()以防在2.14版之前从资源获取数据时发生异常

Camel: How to force enrich() do not invoke aggregate() in case of exception occurred on getting data from resource before version 2.14

在 camel 2.14 中出现选项 aggregateOnException 来强制 aggregate() 调用。

但是我们使用的是2.8版本。

在我的例子中是这样的代码

from("some_route").routeId("enrich")
                .enrich("some_resource_with_useful_info", MyAggregator())
                .multicast().stopOnException()
                    .to("first_client", "second_client");

可能会在 "some_resource_with_useful_info" 上失败,我希望骆驼不要在 MyAggregator 中调用 aggregate()。但它确实调用并且发生了第二个异常。

同时配置了onException。

onException(Exception.class).handled(true).useOriginalMessage()
                    .to(ERROR_LOGGING_ENDPOINT).end();

您可以检测 MyAggregator 中的异常并将其传播到 oldExchange,以便 Camel 错误处理程序可以做出反应。

有些事情很长

if (newExchange.getException() != null) {
   oldExchange.setException(newExchange.getException());
   return oldExchange;
}