问题描述
我的骆驼split()路由中有一个聚合策略。
from("direct:split")
.split()
.method(new SplitBean(),"splitMessage")
.aggregationStrategy(AggregationStrategies.groupedExchange())
.stopOnException()
.to("direct:destination")
.end();
splitMessage方法已将数据分为3个请求数据。所以我击中了http目标端点3次。
使用汇总策略,我的http响应在前2次被汇总。
http呼叫因异常而失败的第三次。返回给呼叫者的交换不包含前两个分组的交换。
在这种情况下,如何获得分组交换(成功,例外)。
如果问题不清楚,请告诉我。
解决方法
-
从.stopOnException()更改为.stopOnAggregateException()
-
创建一个AggregationStrategy策略类并从那里处理异常
public void configure()引发异常{
from("direct:split") .split() .method(new SplitBean(),"splitMessage") .aggregationStrategy(new ErrorStrategy()) .stopOnAggregateException() .to("direct:destination") .end(); } public class ErrorStrategy implements CompletionAwareAggregationStrategy { @Override public void onCompletion(Exchange exchange) { } @Override public Exchange aggregate(Exchange oldExchange,Exchange newExchange) { if (newExchange.getException() != null) { return oldExchange; } if (oldExchange == null) { .... return newExchange; } ..... return oldExchange; } }