Mule AMQP传输3.6.2社区可能存在的错误

Mule AMQP传输3.6.2社区可能存在的错误,mule,amqp,Mule,Amqp,我一直在追踪一些奇怪的行为,最终我成功地将其隔离,我相信这是一个bug。为了重现行为,我创建了4个测试流(在4个不同的mule文件中): 最初,没有testhttp流。testsend流中的端点连接器是一个HTTP连接器,它工作得非常好。 我立即在前端添加了额外的流,将HTTP连接器移动到该流,并添加额外的请求-响应AMQP(因此等待内部AMQP请求-响应完成),内部AMQP请求-响应连接停止工作 现在,它们只是挂起响应,直到超时发生,然后返回空负载 对我来说,这看起来不像是正确的行为,而且

我一直在追踪一些奇怪的行为,最终我成功地将其隔离,我相信这是一个bug。为了重现行为,我创建了4个测试流(在4个不同的mule文件中):


最初,没有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 + &quot;\nTestReceive\n&quot; + flowVars.subPayload]" doc:name="Set Payload"/>
    <logger level="INFO" doc:name="Logger" message="&quot;Configuration XML =\n #[payload]&quot;"/>
</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 + &quot;\nTestReceive2\n&quot; + flowVars.subPayload]" doc:name="Set Payload"/>
    <logger level="INFO" doc:name="Logger" message="&quot;Configuration XML =\n #[payload]&quot;"/>
</flow>