为什么我在Mule中使用JMS队列后没有获得更改的有效负载?

时间:2013-07-30 19:40:31

标签: java queue jms mule

我使用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>

2 个答案:

答案 0 :(得分:2)

您未在exchange-patternjms: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>

希望这有帮助。