我正在尝试构建一个具有多个骆驼路线的应用程序,这些路线在内部重用许多常见路线。
因此,我尝试将路由分隔在几个不同的路由生成器类中,然后在需要的地方连接路由。
例如,与发送电子邮件有关的所有路由都进入 EmailRouteBuilder 类,而处理特定 JMS 队列的所有路由都进入 MyQueueRouteBuilder 类。
我想这应该没问题,因为 Camel 不区分类,只查找路由定义。
此外,我还将几个异常处理路由分组到一个单独的 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>
我的 exceptsRouteBuilder 包含许多异常子句,例如 -
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 中验证了相同的行为。
谢谢,
阿南德