Mule 请求者正在使用 JMS 队列中的所有消息

Posted

技术标签:

【中文标题】Mule 请求者正在使用 JMS 队列中的所有消息【英文标题】:Mule requester is consuming all the messages from JMS queue 【发布时间】:2014-11-08 04:54:19 【问题描述】:

我在使用 Mule 请求程序时遇到了一个小问题。 我有以下 Mule 流程:-

 <!-- This flow sends payload to ActiveMQ -->
 <flow name="SendPayloadToActiveMQ" doc:name="mulerequesterdemoFlow1">
 <http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:8088/requester" doc:name="HTTP"/>
 <set-payload value="My Payload" doc:name="Set Payload"/>
 <jms:outbound-endpoint doc:name="JMS" queue="input" connector-ref="Active_MQ"/>
 </flow>

 <!-- This flow consumes 3 payload from ActiveMQ -->
<flow name="CountRequester" doc:name="CountRequester">
 <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" path="request3messages"/>
 <mulerequester:request-collection config-ref="Mule_Requester" resource="jms://input" doc:name="Mule Requester" count="3"/>
 <logger level="INFO" doc:name="Logger" message="Payload: #[payload]"/>
    </flow>

现在您可以看到第一个流 SendPayloadToActiveMQ 将有效负载发送到 JMS 队列 input 队列,第二个流 CountRequester 将只消费来自 JMS input 队列的 3 条消息.. 但现在的问题是,如果 input 队列中有 6 条消息,那么第二个流程正在消耗队列中的所有 6 条消息,并且队列留空.. 我什至可以在记录器中看到所有六条消息都被消耗了 Payload:org.mule.api.processor.LoggerMessageProcessor: Payload: [My Payload, My Payload, My Payload, My Payload, My Payload, My Payload] 但假设我配置时只消耗 3 条消息 &lt;mulerequester:request-collection config-ref="Mule_Requester" resource="jms://input" doc:name="Mule Requester" count="3"/&gt; 那应该只消耗3条消息.... 请帮忙..我在这里做错什么了吗?

【问题讨论】:

【参考方案1】:

停止迭代的逻辑曾经有一个错误:https://github.com/mulesoft/mule-module-requester/commit/4ad1fd74b2dc76e1231c246623909f5e4fe4f145#diff-2

那么你使用的是什么版本的请求者模块?

编辑:似乎还有另一个错误阻止request-collection 兑现请求的count:https://github.com/mulesoft/mule-module-requester/issues/9

要解决此问题,您可以:

自己修复错误(更多的是 while 循环上方的变量初始化)并使用您自己的模块快照。 在一个小的 Groovy 组件中实现相同的逻辑。您可以简单地返回有效载荷的java.util.List,而不是MuleMessageCollection

【讨论】:

以上是关于Mule 请求者正在使用 JMS 队列中的所有消息的主要内容,如果未能解决你的问题,请参考以下文章

从 mule 中的队列/主题中读取消息

Mule 在变压器中使用 JMS 连接器

Mule ESB HornetQ JMS 消息未传递

重新传递 Mule ESB 处理的失败的 activemq jms 消息时保留异常原因

Mule 组件交互 - 基于消息?

替换 jms 队列中的消息