Mule AMQP传输3.6.2社区可能存在的错误
我一直在追踪一些奇怪的行为,最终我成功地将其隔离,我相信这是一个bug。为了重现行为,我创建了4个测试流(在4个不同的mule文件中):Mule AMQP传输3.6.2社区可能存在的错误,mule,amqp,Mule,Amqp,我一直在追踪一些奇怪的行为,最终我成功地将其隔离,我相信这是一个bug。为了重现行为,我创建了4个测试流(在4个不同的mule文件中): 最初,没有testhttp流。testsend流中的端点连接器是一个HTTP连接器,它工作得非常好。 我立即在前端添加了额外的流,将HTTP连接器移动到该流,并添加额外的请求-响应AMQP(因此等待内部AMQP请求-响应完成),内部AMQP请求-响应连接停止工作 现在,它们只是挂起响应,直到超时发生,然后返回空负载 对我来说,这看起来不像是正确的行为,而且
最初,没有testhttp流。testsend流中的端点连接器是一个HTTP连接器,它工作得非常好。
我立即在前端添加了额外的流,将HTTP连接器移动到该流,并添加额外的请求-响应AMQP(因此等待内部AMQP请求-响应完成),内部AMQP请求-响应连接停止工作
现在,它们只是挂起响应,直到超时发生,然后返回空负载
对我来说,这看起来不像是正确的行为,而且感觉像是与同时进行两层AMQP请求响应有关的某种bug
有人正确地使用了这个模式吗
谢谢 嵌套的AMQP请求-响应交互似乎阻止了第一个AMQP的工作。可以肯定的是,您是否可以发送带有
有效负载的测试消息something1
和something2
因此流将转到否则
块,并且不会有嵌套的AMQP交互?谢谢David。是的,我在测试期间这样做了,但我刚刚又这样做了,在集合的位置0中插入了一个额外的元素“somethingElse”。这将命中块中的记录器。此外,如果我卸下初始AMQP连接器(并用VM或子流替换它),一切也会正常工作。因此,问题显然在于嵌套的AMQP请求响应。这听起来确实像是一个bug。。。我建议你报告:谢谢大卫。我已经这样做了。我按照建议报告了这个bug,但是没有迹象表明有人在一个月后看过这个报告,所以我不知道它是否有任何好处。
<flow name="testhttpFlow">
<http:listener config-ref="HTTP_Listener_AMIAB" path="/testsend" allowedMethods="GET, POST" doc:name="HTTP"/>
<amqp:outbound-endpoint exchangeName="AMQP.DEFAULT.EXCHANGE" routingKey="masterMeep" exchangeType="direct" responseTimeout="10000" exchange-pattern="request-response" connector-ref="connector.amqp.mule.default" doc:name="AMQP-0-9"/>
</flow>
<flow name="testsendFlow" >
<amqp:inbound-endpoint responseTimeout="10000" exchange-pattern="request-response" doc:name="AMQP-0-9" connector-ref="connector.amqp.mule.default" exchangeName="AMQP.DEFAULT.EXCHANGE" exchangeType="direct" queueDurable="true" queueName="masterMeep"/>
<set-payload value="#[new java.util.ArrayList()]" doc:name="Set Payload to Collection"/>
<scripting:component doc:name="JavaScript">
<scripting:script engine="JavaScript"><![CDATA[payload.add("something1");
payload.add("something2");
result=payload;]]>
</scripting:script>
</scripting:component>
<set-variable variableName="payloadCollection" value="#[payload]" doc:name="Set payloadCollection"/>
<foreach doc:name="For Each">
<choice doc:name="Choice">
<when expression="payload == 'something1'">
<amqp:outbound-endpoint exchangeName="AMQP.DEFAULT.EXCHANGE" routingKey="meep" exchangeType="direct" responseTimeout="60000" exchange-pattern="request-response" connector-ref="connector.amqp.mule.default" doc:name="AMQP-0-9 meep1"/>
</when>
<when expression="payload == 'something2'">
<amqp:outbound-endpoint exchangeName="AMQP.DEFAULT.EXCHANGE" routingKey="meep2" exchangeType="direct" responseTimeout="10000" exchange-pattern="request-response" doc:name="AMQP-0-9 meep2" connector-ref="connector.amqp.mule.default"/>
</when>
<otherwise>
<logger level="INFO" doc:name="Logger"/>
</otherwise>
</choice>
<set-payload value="#[message.payloadAs(java.lang.String)]" doc:name="To String"/>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
<scripting:transformer doc:name="Replace array element">
<scripting:script engine="JavaScript"><![CDATA[var payload = message.getPayload();
var payloadCollection = message.getInvocationProperty('payloadCollection');
var counter = message.getInvocationProperty('counter');
payloadCollection.set(counter - 1, payload);
result = payload;]]></scripting:script>
</scripting:transformer>
</foreach>
<logger level="INFO" doc:name="Logger" message="#[payload]"/>
</flow>
<flow name="testreceiveFlow">
<amqp:inbound-endpoint exchangeName="AMQP.DEFAULT.EXCHANGE" queueName="meep" exchangeType="direct" queueDurable="true" responseTimeout="60000" exchange-pattern="request-response" connector-ref="connector.amqp.mule.default" doc:name="AMQP-0-9"/>
<set-payload value="#[message.payloadAs(java.lang.String)]" doc:name="Set Payload"/>
<set-variable variableName="subPayload" value="#[payload]" doc:name="Variable"/>
<http:request config-ref="HTTP_Request_Polestar" path="/api/query/ServiceProxyConfigurationLookup" method="GET" doc:name="HTTP Get ConfigXml" followRedirects="true">
<http:request-builder>
<http:query-param paramName="ApiName" value="customer"/>
<http:query-param paramName="Action" value="GET"/>
<http:query-param paramName="Section" value="TestGPO"/>
</http:request-builder>
</http:request>
<json:json-to-object-transformer doc:name="JSON to Object" returnClass="java.lang.Object"/>
<set-variable variableName="serviceProxyConfigurationLookup" value="#[payload]" doc:name="Variable"/>
<set-payload value="#[payload[0].ServiceProxyConfiguration.ConfigurationList + "\nTestReceive\n" + flowVars.subPayload]" doc:name="Set Payload"/>
<logger level="INFO" doc:name="Logger" message=""Configuration XML =\n #[payload]""/>
</flow>
<flow name="testreceiveFlow2">
<amqp:inbound-endpoint exchangeName="AMQP.DEFAULT.EXCHANGE" queueName="meep2" exchangeType="direct" queueDurable="true" responseTimeout="60000" exchange-pattern="request-response" connector-ref="connector.amqp.mule.default" doc:name="AMQP-0-9"/>
<set-payload value="#[message.payloadAs(java.lang.String)]" doc:name="Set Payload"/>
<set-variable variableName="subPayload" value="#[payload]" doc:name="Variable"/>
<http:request config-ref="HTTP_Request_Polestar" path="/api/query/ServiceProxyConfigurationLookup" method="GET" doc:name="HTTP Get ConfigXml" followRedirects="true">
<http:request-builder>
<http:query-param paramName="ApiName" value="customer"/>
<http:query-param paramName="Action" value="GET"/>
<http:query-param paramName="Section" value="TestGPO"/>
</http:request-builder>
</http:request>
<json:json-to-object-transformer doc:name="JSON to Object" returnClass="java.lang.Object"/>
<set-variable variableName="serviceProxyConfigurationLookup" value="#[payload]" doc:name="Variable"/>
<set-payload value="#[payload[0].ServiceProxyConfiguration.ConfigurationList + "\nTestReceive2\n" + flowVars.subPayload]" doc:name="Set Payload"/>
<logger level="INFO" doc:name="Logger" message=""Configuration XML =\n #[payload]""/>
</flow>