是否可以为每个端点声明拦截器,而不是每个CamelContext?就我而言,我有很多CamelContexts,我想用端点声明和拦截器将常用代码提取到一个文件:camel-common-context.xml。提取端点绝对没有问题,但如何提取拦截器?它是可能的还是它们应该位于我想要使用端点的每个CamelContext中?在我的情况下,我在下面发布的修改后的相关骆驼语境中看不到它们:
我的camel-common-context.xml:
<camelContext id="esb" xmlns="http://camel.apache.org/schema/spring">
<endpoint id="externalSystem" uri="${external.system.url}?throwExceptionOnFailure=false" />
<interceptFrom>
<convertBodyTo type="java.lang.String" />
<when>
<xpath>not(/soapenv:Envelope)</xpath>
<process ref="soapFaultProcessor" />
</when>
<otherwise>
<convertBodyTo type="java.lang.String" />
</otherwise>
</interceptFrom>
<interceptSendToEndpoint uri="ref:externalSystem">
<setHeader headerName="SYSTEM">
<constant>EXTERNAL</constant>
</setHeader>
<convertBodyTo type="java.lang.String" />
<to uri="log:wSSProcessor_external_system_request?level=DEBUG" />
</interceptSendToEndpoint>
</camelContext>
其他骆驼语境(我只导入资源):
<import resource="camel-common-context.xml" />
当我在每个camel-context中使用拦截器声明每个端点时,我没有任何问题,但它是一个错误的模式,有很多复制粘贴。
在这question中,我看到有一个信息是&#34;我不认为使用InterceptorStrategy是可能的,因为它期望它在相同的camel环境中运行&#34;。还有什么我认为在一个应用程序中使用多个上下文是bad pattern
更新
我试图将我的架构改为一个Camel Context,更多的路线上下文跟进@Lukasz N回答,但我遇到了障碍CamelBugWithRouteContexts。看起来很难解决我的问题,但它应该适用于高于2.8的骆驼版本。
答案 0 :(得分:1)
在Java DSL或Spring DSL中编写处理器并包含在每个拦截中
<camel:interceptFrom>
<camel:process ref="InterceptProcessor"></camel:process>
</camel:interceptFrom>
处理器将进行记录或您需要的任何其他记录。
答案 1 :(得分:1)
你可以用端点,拦截器声明等和多个路由上下文编写一个camel-context,并在你的camel-context中导入它们。