与Camel AHC和蓝图中的选择标记一起使用时,交换标头混合

时间:2015-02-14 07:23:45

标签: apache-camel blueprint-osgi

我在路线中有选择条件的路线中使用Camel AHC组件。取决于标题的值,决定。在正常测试期间,路线工作正常。但是当在负载下使用时,Exchange标头开始从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>

切换发生在ahc组件调用之后,当我来到scriptprocessor或adeprocessor时,header.Method的值从GET_ENTRY切换到GET_FEED,反之亦然。奇怪的问题。仅在负载测试下发生,并且仅在1/8的呼叫中发生。

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

此致 迪利普

0 个答案:

没有答案