我使用ActiveMQ使用JMS进行了流程,我向队列发送了一条消息,但是当我试图从队列中消耗时,出于任何原因,获取消息并通过设置新的有效负载来更改它,它没有改变。我究竟做错了什么?
基本上我想通过HTTP响应发回更改的有效负载
这是我的代码:
<jms:activemq-connector name="Active_MQ"
specification="1.1"
brokerURL="tcp://localhost:61616"
validateConnections="true"
doc:name="Active MQ"
persistentDelivery="true"
/>
<flow name="jmsFlow1" doc:name="jmsFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="jms" doc:name="HTTP"/>
<set-payload value="#['This is a message test']" doc:name="Set Payload"/>
<choice doc:name="Choice">
<when expression="#[true]">
<processor-chain>
<logger message="Im here!!" level="INFO" doc:name="Logger"/>
<jms:outbound-endpoint queue="StudioIN" connector-ref="Active_MQ" doc:name="JMS Queue Studio IN" exchange-pattern="request-response"/>
</processor-chain>
</when>
</choice>
<logger message="#[payload]" level="INFO" category="//// RETURNED FROM QUEUE PAYLOAD" doc:name="Logger"/>
</flow>
<flow name="fmsAdapterConsumerFlow1" doc:name="fmsAdapterConsumerFlow1">
<jms:outbound-endpoint queue="StudioIN" connector-ref="Active_MQ" doc:name="JMS StudioIN Consumer" exchange-pattern="request-response"/>
<set-payload value="#[payload + ' returned from queue']" doc:name="Set Payload"/>
</flow>
答案 0 :(得分:2)
您未在exchange-pattern
和jms:outbound-endpoint
上指定jms:inbound-endpoint
。因此,Mule使用默认值one-way
。因此,fmsAdapterConsumerFlow1
中的有效负载更改无法回复jmsFlow1
。
在两个JMS端点上设置exchange-pattern="request-response"
,并在连接器上设置disableTemporaryReplyToDestinations="false"
,否则您将永远不会收到任何响应。
答案 1 :(得分:1)
上述第二个流程将被更改。 如果必须读取消息并处理它,则此流程从入站端点开始。
<flow name="fmsAdapterConsumerFlow1" doc:name="fmsAdapterConsumerFlow1">
<jms:inbound-endpoint queue="StudioIN" connector-ref="Active_MQ" doc:name="JMS StudioIN Consumer" exchange-pattern="request-response"/>
<set-payload value="#[payload + ' returned from queue']" doc:name="Set Payload"/>
</flow>
希望这有帮助。