我在路线中有选择条件的路线中使用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组件中的头处理有关吗?
此致 迪利普