骆驼拆分中发生异常时如何获取groupedExchanges?

问题描述

我的骆驼split()路由中有一个聚合策略。

from("direct:split")
    .split()
        .method(new SplitBean(),"splitMessage")
        .aggregationStrategy(AggregationStrategies.groupedExchange())
        .stopOnException()
    .to("direct:destination")
    .end();

splitMessage方法已将数据分为3个请求数据。所以我击中了http目标端点3次。

使用汇总策略,我的http响应在前2次被汇总。

http呼叫因异常而失败的第三次。返回给呼叫者的交换不包含前两个分组的交换。

在这种情况下,如何获得分组交换(成功,例外)。

如果问题不清楚,请告诉我。

解决方法

  1. 从.stopOnException()更改为.stopOnAggregateException()

  2. 创建一个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;
         }
         }