Java 当骆驼分割中发生异常时,如何获取GroupedExchange?

Java 当骆驼分割中发生异常时,如何获取GroupedExchange?,java,apache-camel,spring-camel,Java,Apache Camel,Spring Camel,我在camel split()路由中有一个聚合策略 from(“直接:拆分”) .split() .method(新的SplitBean(),“splitMessage”) .aggregationStrategy(AggregationStrategies.groupedExchange()) .stopOnException() .至(“直接:目的地”) .end(); splitMessage方法已将数据拆分为3个请求数据。因此,我命中http目标端点3次 使用聚合策略,我的http响应

我在camel split()路由中有一个聚合策略

from(“直接:拆分”)
.split()
.method(新的SplitBean(),“splitMessage”)
.aggregationStrategy(AggregationStrategies.groupedExchange())
.stopOnException()
.至(“直接:目的地”)
.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;
         }
         }
    

  • 它现在跳过了异常交换。但是我正在寻找的是应该捕获异常交换,并且应该停止剥离(通过StopOneException)。您有什么解决方法可以建议吗?这仍然是一个谜!