Невозможно постоянно повторять Camel Route в случае определенного исключения

Я очень новичок в 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");

person Hargun Suri    schedule 24.02.2020    source источник


Ответы (1)


Отключите обработчик ошибок в маршруте задачи, чтобы при вызове этого маршрута Camel повторил попытку всего маршрута, вместо того, чтобы обработчик ошибок маршрута повторил попытку в точке вне ошибки.

from("direct:updateTheTask")
  .errorHandler(noErrorHandler());
  .to("direct:getWoTaskDetail")
person Claus Ibsen    schedule 24.02.2020