骆驼上下文和异常分离

Camel context and exception separation

我已经分出骆驼xml个文件喜欢

  1. FileA.xml
<routeContext id="routeA" xmlns="http://camel.apache.org/schema/spring">
    <route id="...">
        <from uri="..."/>
            <to uri="..."/>
    </route>
</routeContext>
  1. FileB.xml
<routeContext id="routeB" xmlns="http://camel.apache.org/schema/spring">
    <route id="...">
        <from uri="..."/>
            <to uri="..."/>
    </route>
</routeContext>
  1. Core.xml
<camelContext xmlns="http://camel.apache.org/schema/spring" >
    <routeContextRef ref="routeA"/>
    <routeContextRef ref="routeB" />
</camelContext>

此设置工作正常。

现在我想将 onException 添加到另一个 xml 文件中,并且需要在 Core.xml 中导入它,因为我们需要处理很多不同的异常。

<onException>
    <exception>org.apache.camel.ExpressionEvaluationException</exception>
    <handled>
        <constant>true</constant>
    </handled>
    <to uri="..."/>
</onException>

问题是 <onException> 只能添加到 <camelContext> 中,所以我无法将 exception.xml 文件与 core.xml.

分开
  1. 有没有办法这样做(将 exception.xml 文件导入 core.xml 文件)?
  2. 我可以拥有多个 camel 上下文文件并将 add/import 一个上下文转换为另一个上下文吗?

请帮忙解决这个问题。

在 Camel 2.x 中,一个应用程序中可以有多个 Camel 上下文。对于 Camel 3.x,这已被删除并且 only 1 Camel Context is supported

因此,即使在 Camel 2.x 中可以使用多个 camelContext XML 文件(我不知道它是否有效),但至少不能未来证明。所以你应该坚持使用 1 camelContext XML 导入 routeContexts.

现在是错误处理程序和异常子句。在 Camel 中,它们可以具有全局作用域或路由作用域。

  • 如果它们是路由范围的,那么无论如何它们都在相应的 routeContext 中。所以这里没问题
  • 据我所知,如果它们是全局范围的,它们必须位于单个 camelContext 文件中

但是,您可以自由地做的是将所有错误内容放在单独的 XML 文件中,然后 在构建过程中以某种方式合并它们。例如使用 Maven 插件或类似的东西。

像这样,您的代码中有一个干净的分隔,而Camel 有一个camelContext 文件,其中包含所有内容除了单独的 routeContexts。所以希望你们俩,你们和骆驼都能快乐:-)