代码之家  ›  专栏  ›  技术社区  ›  isy

camel-使用拆分运算符处理异常

  •  1
  • isy  · 技术社区  · 8 年前

    我用一个订单/项目示例简化了我的用例。

    订单中有一些项目。 每个项都受控制=>可以从“controlItem”中引发AvailabilityException。 抛出异常后,项被标记为OK,并处理下一项。

           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,…)时,我希望停止进程。我们不处理下一个项目,订单被重定向到错误队列。 我该怎么做?

    1 回复  |  直到 8 年前
        1
  •  1
  •   pvpkiran    8 年前

    doTry doCatch

    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. stop() exchange.getContext().stop();

    3. onException RunTimeException

    4. exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);