2013-12-05 3 views
2

У меня есть маршрут, который имеет «to», статья. Я использовал блок catch try для перенаправления обмена на маршрут, если происходит какое-то исключение. Исключением, которое я имел, было связано с максимальным количеством параллельных подключений, разрешенных с клиентом. Кажется, когда исключение разрешено, каждая повторная попытка обмена обрабатывалась дальше, где она была оставлена. Как я могу закончить маршрут, который имел исключение.Apache Camel route end при использовании try catch

Следующий мой код.

from("direct:hourlyFeedParts") 
    .routeId("appnexus hourly downloader") 
    .doTry() 
     .process(AppNexusProcessor.getDownloadProcessor()) 
     .process(AppNexusProcessor.getNamingProcessor()) 
     .id("Appnexus Feed Downloader") 
     .log("Downloading file ${file:name}") 
     .to("{{appnexus.partsDestination}}") 
     .log("Downloaded file ${file:name} to local") 
    .doCatch(Exception.class) 
     .to("direct:hourlyFeedParts") 
    .end() 
    .bean(AppNexusProcessor.class, "updateIdempotentList") 
    .choice() 
     .when(simple("${property.CamelSplitComplete} == true")) 
     .split(beanExpression(AppNexusProcessor.class, "getAggregatorProcessor")) 
     .to("direct:S3PreProcessor") 
     .endChoice() 
    .end(); 

Я мышление может использовать endParent() после

.doCatch(Exception.class) 
.to("direct:hourlyFeedParts") 
    .endParent() 

Является ли это правильный подход. Я не мог понять точное использование endParent() из документации.

ответ

5

Просто добавьте stop() в конце doCatch() блока:

.doCatch(Exception.class) 
    .to("direct:hourlyFeedParts") 
    .stop() 
.end() 
+0

Спасибо. И изменится ли «.end()» на «endDoTry()»? –

+0

Извините, я допустил ошибку. Как я уже сказал, блок catch должен быть завершен с помощью .stop() –

+0

Да, я получил это. Используется «стоп». –

0

Почему бы вам не использовать механизм Redelivery, вместо реинжекции обмен на маршруте?

onException(Exception.class) 
    .maximumRedeliveries(2).redeliveryDelay(0); 

Вы можете разделить свой маршрут, а также, если вы не хотите, чтобы повторить весь маршрут или перехватывать исключения на только часть вашего маршрута: http://camel.apache.org/how-do-i-retry-processing-a-message-from-a-certain-point-back-or-an-entire-route.html

+0

Спасибо за предложение, но упомянутый выше маршрут является лишь частью большого маршрута. Повторная доставка будет повторять все части маршрута, которые были успешно завершены. Это было бы бесполезно. Кроме того, есть несколько частей. Обработчик ошибок необходим для всех частей. Документация, которую вы предлагаете, не помогла бы в моем случае. –

Смежные вопросы