Невозможно повторить попытку верблюжьего маршрута постоянно в случае указанного c исключения - PullRequest
0 голосов
/ 24 февраля 2020

Я очень плохо знаком с Apache верблюдом, у меня есть ситуация, когда мне нужно выполнить действие ниже

Всякий раз, когда я получаю указанный c тип исключения, мне нужно повторить полный маршрут снова, Но я сталкиваюсь с проблемой исключения обработки циклических ошибок и бесконечной рекурсии при реализации с использованием 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");

1 Ответ

0 голосов
/ 24 февраля 2020

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

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