骆驼:如何强制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;
}
在 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;
}