当前位置: 首页 > 知识库问答 >
问题:

当camel拆分中发生异常时,如何获取groupedExchange?

马坚白
2023-03-14

我在我的骆驼分裂()路线中有一个聚合策略。

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

splitMessage方法已将数据拆分为3个请求数据。因此,我将点击http目标endpoint3次。

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

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

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

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

共有1个答案

汪庆
2023-03-14

>

  • 从. ostOnException()更改为. ostOnAggregate Exception()

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

  •  类似资料:
    • 我需要做的是,当抛出异常时,我需要将处理延迟一段可配置的时间,比如15分钟。这将给服务器一些时间来稳定,而不是不必要地保持轮询。我正在使用骆驼的errorHandler机制,但它似乎不起作用。Camle不停地收到请求,没有任何延迟。请帮助解决这个问题。下面是束上下文快照:

    • 我们的编写器设计用于将记录写入关系数据库。如果任何记录发生异常,Spring Batch将对区块中的每条记录执行回滚并重试写入操作。这导致发生SQL重复密钥异常,因为区块中先前处理的记录已成功写入数据库。 我们已经尝试使用noRetry()和noRollback(),明确指定不应该触发重试或回滚的异常列表。 根据Spring Batch在线留档noRollback()可用于防止在ItemWrite

    • 我有一个带有绑定的REST-dsl骆驼路由:json_xml with.type()和outType()。当没有异常发生时,它工作得很好。也就是说,json输入给出了json输出。Xml输入给出Xml输出。

    • 我们在Camel中定义了一个具有拆分和聚合功能的路由,但无法在聚合器之后将异常传播回拆分。这导致即使我们遇到异常,拆分也会运行 下面是不工作的代码 上述代码中的处理器(myProcessor)如下: 但是,当我从路由中移除聚合时,Split能够在异常情况下停止路由。

    • 假设我有以下代码行, 我的代码为: 现在发生的情况是,当编译器到达}catch(final SQLException se){时,它没有转到它的catch主体,只是脱离了,不知道为什么吗?

    • 如何使用camel实现此过程: > 处理每个拆分项目 聚合结果 如果发生异常: 停止拆分 返回异常前所有项目的聚合结果以及异常信息 在split上定义.stopOneException(),我可以在没有聚合结果的情况下停止进程并输出异常信息。 是否可以通过处理聚合策略强制拆分器中的异常来停止处理所有剩余项目?