首页 > 解决方案 > 在特定异常的情况下无法连续重试骆驼路线

问题描述

我对 Apache camel 很陌生,我遇到需要执行以下操作的情况

每当我收到特定类型的异常时,我需要再次重试完整的路由,但是我在使用 onException 实现时面临循环错误处理异常和无限递归的问题。

下面是我的虚拟代码

 from("direct:updateTheTask")
.to("direct:getWoTaskDetail")
.to("direct:getSoTaskDetail")
.to("direct:updateTaskDetail")
.to("direct:getSoTaskDetail")   
.to("direct:getWoTaskDetail")
.to("direct:endRoute");


 from("direct:updateTaskDetail").routeId("updateTaskDetail")
.bean(BEAN, Constants.SET_PARAMS)
.to("direct:restUpdate")
.to(getGetResponseBeanUrl(BEAN));

我调用了“direct:updateTheTask”路由,并且“direct:updateTaskDetail”在我的情况下给出了异常,当收到异常时我想从“direct:updateTheTask”再次重试维护/持久化数据以进行交换。

如果在此递归期间“direct:updateTaskDetail”没有引发此类异常,则路由应正常完成。

我使用了以下 2 种方法,但似乎对我不起作用。

onException(TaskException.class)
.handled(true)
.maximumRedeliveries(-1)
.redeliveryDelay(20);

另一种方法是

onException(TaskException.class)
.handled(true)
.delay(20)
.to("direct:updateTheTroubleTicket");

标签: javaspringapache-camelspring-camel

解决方案


关闭任务路由中的错误处理程序,因此在调用此路由时,Camel 将重试整个路由,而不是路由错误处理程序将在错误发生时重试。

from("direct:updateTheTask")
  .errorHandler(noErrorHandler());
  .to("direct:getWoTaskDetail")

推荐阅读