Я пытаюсь создать приложение с несколькими верблюжьими маршрутами, которые повторно используют множество общих маршрутов.
Поэтому я пытаюсь разделить маршруты в нескольких разных классах Route Builder, а затем соединяю маршруты там, где это необходимо.
Например, все маршруты, относящиеся к отправке электронных писем, переходят в класс EmailRouteBuilder, а все маршруты, связанные с определенной очередью JMS, переходят в класс MyQueueRouteBuilder.
Я полагаю, что это должно быть хорошо, так как Верблюд не различает классы, а только ищет определения маршрутов.
Кроме того, я также группирую несколько маршрутов обработки исключений в отдельный ExceptionHandlingRouteBuilder.
Я также соединяю все разные классы, определяя контекст верблюда в Spring следующим образом -
<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties" location="classpath:${env}/autoimport.properties"/>
<!-- Common Routes -->
<routeBuilder ref="emailRouteBuilder" />
<routeBuilder ref="myQueueRouteBuilder" />
<routeBuilder ref="httpRouteBuilder" />
<routeBuilder ref="exceptionsRouteBuilder" />
<routeBuilder ref="customer1RouteBuilder" />
<routeBuilder ref="customer2RouteBuilder" />
</camelContext>
Мои исключенияRouteBuilder содержит много предложений об исключениях, таких как -
onException(ConnectException.class)
.routeId("connectExceptionEP")
.handled(true)
.log("Caught Exception: ")
.to("direct:gracefulExit");
..
..
..
Однако, похоже, что существует проблема с исключениями, которые определены в другом классе или, в этом отношении, определены отдельно от определения основного маршрута.
Я проверил это в журналах, просматривая загружаемые маршруты (с помощью routeId), а также проверяя, когда возникает исключение.
Кроме того, для дальнейшего подтверждения я выбрал маршрут обработки исключений http Connect и поместил его прямо в httpRouteBuilder, и вот ...! обработка исключений теперь работает очень хорошо для этого исключения ..
Я что-то здесь упускаю, чтобы заставить работать все исключения, будучи хорошо определенным в своем собственном классе. ?
Я использую Apache Camel 2.9.0, но я проверил то же поведение и в 2.8.3.
Спасибо,
Ананд