Apache camel 在blueprint中与Camel AHC和choice标记一起使用时交换标头混合

Apache camel 在blueprint中与Camel AHC和choice标记一起使用时交换标头混合,apache-camel,blueprint-osgi,Apache Camel,Blueprint Osgi,我正在路线中使用驼峰AHC组件,路线中存在选择条件。根据报头的值做出决定。在正常测试期间,路线工作正常。但是,当在负载下使用时,Exchange标头开始从Whose choise when混合到另一个choise when(发生在1/8次调用中)。以下是我的路线: camel:camelContext id="ZEMPSRV" streamCache="true"> <camel:properties> <camel:property key="CamelCach

我正在路线中使用驼峰AHC组件,路线中存在选择条件。根据报头的值做出决定。在正常测试期间,路线工作正常。但是,当在负载下使用时,Exchange标头开始从Whose choise when混合到另一个choise when(发生在1/8次调用中)。以下是我的路线:

camel:camelContext id="ZEMPSRV" streamCache="true">
<camel:properties>
    <camel:property key="CamelCachedOutputStreamCipherTransformation" value="RC4"/>
</camel:properties>
<camel:route>
    <camel:from id="_MessageFlow_20_1422954968407" uri="xyz:abc/ZEMPSRV:Employees"/>
    <camel:choice id="_ExclusiveGateway_8_1422954968423">
        <camel:when>
            <camel:simple>${header.Method} == 'GET_ENTRY'</camel:simple>
            <camel:setHeader headerName="RelativeUri" id="GET_ENTRY_Header_1">
                <camel:simple>abc/zemp_srv/Employees('{Empid}')</camel:simple>
            </camel:setHeader>
            <camel:bean id="_CallActivity_69_1422954968443" method="process" ref="abcprocessor"/>
            <camel:setHeader headerName="scriptFile" id="GET_ENTRY_Header_2">
                <camel:simple resultType="java.lang.String">Employees_REST_Read.groovy</camel:simple>
            </camel:setHeader>
            <camel:setHeader headerName="functionName" id="GET_ENTRY_Header_3">
                <camel:simple resultType="java.lang.String">processRequestData</camel:simple>
            </camel:setHeader>
            <camel:setHeader headerName="scriptFileType" id="GET_ENTRY_Header_4">
                <camel:simple resultType="java.lang.String">groovy</camel:simple>
            </camel:setHeader>
            <camel:bean method="process" ref="scriptprocessor" id="GET_ENTRY_scriptprocessor_pre"/>
            <camel:bean id="_ServiceTask_14_1422954968508" method="process" ref="abcProcessor"/>
            <camel:to uri="ahc:http://host:port/abc/zemp_srv/Employees('000000000001')"/>
            <camel:setHeader headerName="RestContentType" id="GET_ENTRY_Header_5">
                <camel:simple resultType="java.lang.String"/>
            </camel:setHeader>
            <camel:setBody id="_CallActivity_71_1422954968510">
                <camel:simple>${bodyAs(String)}</camel:simple>
            </camel:setBody>
            <camel:setHeader headerName="scriptFile" id="GET_ENTRY_Header_6">
                <camel:simple resultType="java.lang.String">Employees_REST_Read.groovy</camel:simple>
            </camel:setHeader>
            <camel:setHeader headerName="functionName" id="GET_ENTRY_Header_7">
                <camel:simple resultType="java.lang.String">processResponseData</camel:simple>
            </camel:setHeader>
            <camel:setHeader headerName="scriptFileType" id="GET_ENTRY_Header_8">
                <camel:simple resultType="java.lang.String">groovy</camel:simple>
            </camel:setHeader>
            <camel:bean method="process" ref="scriptprocessor" id="GET_ENTRY_scriptprocessor_post"/>
            <camel:bean id="_CallActivity_73_1422954968577" method="process" ref="cdeProcessor"/>
        </camel:when>
        <camel:when>
            <camel:simple>${header.Method} == 'GET_FEED'</camel:simple>
            <camel:setHeader headerName="RelativeUri" id="GET_FEED_Header_1">
                <camel:simple>/abc/zemp_srv/Employees</camel:simple>
            </camel:setHeader>
            <camel:setHeader headerName="scriptFile" id="GET_FEED_Header_2">
                <camel:simple resultType="java.lang.String">Employees_REST_Query.groovy</camel:simple>
            </camel:setHeader>
            <camel:setHeader headerName="functionName" id="GET_FEED_Header_3">
                <camel:simple resultType="java.lang.String">processRequestData</camel:simple>
            </camel:setHeader>
            <camel:setHeader headerName="scriptFileType" id="GET_FEED_Header_4">
                <camel:simple resultType="java.lang.String">groovy</camel:simple>
            </camel:setHeader>
            <camel:bean method="process" ref="scriptprocessor" id="GET_FEED_scriptprocessor_pre"/>
            <camel:bean id="_ServiceTask_15_1422954968675" method="process" ref="abcDestinationProcessor"/>
            <camel:to uri="ahc:http://host:port/abc/zemp_srv/Employees?$filter=Empid%20le%20%27000000000050%27"/>
            <camel:setHeader headerName="RestContentType" id="GET_FEED_Header_5">
                <camel:simple resultType="java.lang.String"/>
            </camel:setHeader>
            <camel:setHeader headerName="Dilip" id="GET_ENTRY_Header_111">
                <camel:simple resultType="java.lang.String">Patidar</camel:simple>
            </camel:setHeader>
            <camel:setBody id="_CallActivity_76_1422954968677">
                <camel:simple>${bodyAs(String)}</camel:simple>
            </camel:setBody>
            <camel:setHeader headerName="scriptFile" id="GET_FEED_Header_6">
                <camel:simple resultType="java.lang.String">Employees_REST_Query.groovy</camel:simple>
            </camel:setHeader>
            <camel:setHeader headerName="functionName" id="GET_FEED_Header_7">
                <camel:simple resultType="java.lang.String">processResponseData</camel:simple>
            </camel:setHeader>
            <camel:setHeader headerName="scriptFileType" id="GET_FEED_Header_8">
                <camel:simple resultType="java.lang.String">groovy</camel:simple>
            </camel:setHeader>
            <camel:bean method="process" ref="scriptprocessor" id="GET_FEED_scriptprocessor_post"/>
            <camel:bean id="_CallActivity_78_1422954968744" method="process" ref="cdeProcessor"/>
        </camel:when>
        <camel:otherwise/>
    </camel:choice>
</camel:route>
camel:camelContext id=“ZEMPSRV”streamCache=“true”>
${header.Method}=='GET\u ENTRY'
abc/zemp_srv/雇员({Empid})
员工休息阅读。groovy
processRequestData
棒极了
${bodyAs(字符串)}
员工休息阅读。groovy
过程响应数据
棒极了
${header.Method}=='GET\u FEED'
/abc/zemp_srv/员工
Employees\u REST\u Query.groovy
processRequestData
棒极了
帕蒂达尔
${bodyAs(字符串)}
Employees\u REST\u Query.groovy
过程响应数据
棒极了

切换发生在ahc组件调用之后,当我来到scriptprocessor或adeprocessor时,header的值。方法是从GET_条目切换到GET_提要,反之亦然。奇怪的问题。仅在负载测试下发生,并且仅在1/8的调用中发生

这是否与骆驼头处理的一般问题有关? 这与驼峰AHC组件中的标头处理有关吗

问候,,
Dilip

这与您的其他AHC问题非常相似/重复!谢谢你,克劳斯。我们已经找到了解决办法。问题出在我们的一个处理器上。啊,我猜你没有将处理器编码为线程安全的?你能结束这个问题,找到解决方案吗?