【问题标题】:Camel - Handle exception with split operatorCamel - 使用拆分运算符处理异常
【发布时间】:2018-07-20 16:25:56
【问题描述】:

我通过订单/商品示例简化了我的用例。

一个订单有一些商品。 每个项目都是受控的 => 可以从“controlItem”抛出一个可用性异常。 抛出异常后,item 被标记为 Ok 并处理下一个 item。

       onException(AvailabilityException.class)
           .onExceptionOccurred(ItemProcessor)
           .handled(true)
       .bean(service, "markAsOk");


       from(startQueue)
           .split(simple("${body.items}"))
                .to(direct:controlItem")                                            
           .end()
       .to(successQueue);


       from("direct:controlItem")
           .bean(service, "controlItem");

现在我有另一个案例:

当抛出意外异常(NullPointerException,...)时,我想停止该过程。我们不处理下一个项目,订单被重定向到错误队列。 我该怎么做?

【问题讨论】:

    标签: exception apache-camel activemq


    【解决方案1】:

    您可以使用doTrydoCatch

    1. from(startQueue)
        .doTry()
           .split(simple("${body.items}"))
                  .to(direct:controlItem")                                            
             .end()
           .to(successQueue);
        .doCatch(AvailabilityException.class)
                ....
                ....
                .handled(true)
         .doCatch(RunTimeException.class)
                ....
                ....
                .handled(false)
                .stop() // stop the execution      
         .doFinally()  //optional
      
    2. 您可以在那里编写一个处理器并使用exchange.getContext().stop(); 而不是stop()

    3. 您也可以为RunTimeExceptions 添加另一个onException 并停止路由。

    4. 另一种可能的方法是使用属性 ROUTE_STOP 。您可以在异常处理器中将此属性设置为 true。 exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多