首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mule: JMS应答队列消耗所有消息。我想处理来回复队列的消息

Mule: JMS应答队列消耗所有消息。我想处理来回复队列的消息
EN

Stack Overflow用户
提问于 2014-08-19 23:22:15
回答 2查看 2.1K关注 0票数 0

我有一个带有JMS请求-应答块的Mule(3.5)流。我看到所有来回复队列的消息都会自动被消耗掉。我想处理到jms回复队列的消息。到目前为止,我已经尝试了jms:selector和jms请求者模块,但没有成功。有办法做到这一点吗?

代码:

代码语言:javascript
复制
<mule>
<flow name="main" doc:name="main">

        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" path="test" port="2000" doc:name="HTTP"/>

        <logger message="starting main flow" level="INFO" doc:name="Logger"/>

        <request-reply storePrefix="mainFlow">  
            <jms:outbound-endpoint queue="StudioIN" connector-ref="Active_MQ1"  exchange-pattern="one-way"/>
            <jms:inbound-endpoint queue="StudioOUT" connector-ref="Active_MQ1" exchange-pattern="one-way">
                <property key="selector" value="JMSCorrelationID='#[message.correlationId]'"/>
            </jms:inbound-endpoint> 
        </request-reply>
    </flow>

    <flow name="worker" doc:name="worker">
                <jms:inbound-endpoint queue="StudioIN" connector-ref="Active_MQ1" doc:name="JMS"/>
            <async doc:name="Async">
                <logger message="starting worker task(s) .... Payload: #[payload], Request: #[message.inboundProperties['http.request']]" level="INFO" doc:name="Logger"/>

                <scripting:component doc:name="thread-sleep(10s)">
                    <scripting:script engine="Groovy">
                        System.out.println "about to sleep @ time" + System.currentTimeMillis()
                        Thread.sleep(10000);
                        System.out.println "done sleeping @ time" + System.currentTimeMillis()
                    </scripting:script>
                </scripting:component>
                <logger message="finishing up worker task(s) ...." level="INFO" doc:name="Logger"/>
            </async>
    </flow> 

</mule>

我想处理回复队列StudioOUT所带来的任何问题。有什么合适的方法来实现这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-20 08:34:16

首先在<property key="selector" value="JMSCorrelationID='#[message.correlationId]'"/>入站端点中删除

然后在入站JMS端点中尝试以下基于过滤器的消息:

代码语言:javascript
复制
<jms:inbound-endpoint queue="StudioOUT" connector-ref="Active_MQ1" exchange-pattern="one-way">
 <jms:selector expression="JMSCorrelationID= #[message.correlationId]" /> 

</jms:inbound-endpoint> 

如果要将属性设置为message并发送到出站JMS端点中的出站JMSQueue,请尝试以下操作:

代码语言:javascript
复制
  <jms:outbound-endpoint queue="StudioOUT" connector-ref="Active_MQ" doc:name="JMS">
         <jms:object-to-jmsmessage-transformer name="ObjectToJmsMessage" />

            <message-properties-transformer>
            <add-message-property key="CorrelationID" value="#[message.correlationId]"/> 
            </message-properties-transformer>
   </jms:outbound-endpoint>

更新流:-为特定类型选择一个JMS,我们需要首先在队列中设置它.例如,让我们假设我们只需要选择和使用那些优先级为7的JMS消息。现在让我们将消息发送到优先级为7的JMS队列中。

因此,在JMS出站端点中设置以下内容

代码语言:javascript
复制
<jms:outbound-endpoint queue="StudioOUT" connector-ref="Active_MQ" doc:name="JMS">
   <jms:object-to-jmsmessage-transformer name="ObjectToJmsMessage" />
         <message-properties-transformer>
           <add-message-property key="Priority" value="7"/> 
    </message-properties-transformer>
</jms:outbound-endpoint>

现在,这将发送消息到队列中,JMS优先级为7。

现在您可以从为7的队列中使用这些消息。重发消息将被忽略,不会被消耗。因此,现在在JMS入站端点中使用以下方法过滤消息:

代码语言:javascript
复制
<jms:inbound-endpoint queue="StudioOUT" connector-ref="Active_MQ1" exchange-pattern="one-way">
<jms:selector expression="JMSPriority = 7" /> 
</jms:inbound-endpoint> 

这里将只使用优先级为7的消息。现在您可以将入站配置为从队列中选择特定类型的消息。但是要确保JMS中存在这种特定类型的消息(这里是带有priority=7的消息)。所以..。为此,您需要使用JMS出站端点向JMS队列发送少量消息,我现在向您展示了这一点。

票数 1
EN

Stack Overflow用户

发布于 2014-08-20 13:47:41

在将消息发送到JMS出站时,使用以下方法复制相关ID

代码语言:javascript
复制
<jms:outbound-endpoint queue="StudioIN" connector-ref="Active_MQ1"  exchange-pattern="one-way">            
    <copy-properties propertyName="*"></copy-properties>
<jms:outbound-endpoint> 

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25394528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档