具有 CLIENT_ACKNOWLEDGE 模式的骡子 jms?即使我没有确认消息也会自动使用
Posted
技术标签:
【中文标题】具有 CLIENT_ACKNOWLEDGE 模式的骡子 jms?即使我没有确认消息也会自动使用【英文标题】:Mule jms with CLIENT_ACKNOWLEDGE mode? Message automatically consumed even though I didn't acknoeledge it 【发布时间】:2014-10-20 03:21:27 【问题描述】:我用 CLIENT_ACKNOWLEDGE 模式创建了一个简单的 mule JMS 流。我对“CLIENT_ACKNOWLEDGE”的理解是,我们必须在接收方或客户端显式确认消息,它不会从队列中消耗,直到它不会确认。
<spring:beans>
<spring:bean name="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<spring:property name="brokerURL" value="tcp://localhost:61616" />
<spring:property name="redeliveryPolicy">
<spring:bean class="org.apache.activemq.RedeliveryPolicy">
<spring:property name="maximumRedeliveries" value="10" />
<spring:property name="initialRedeliveryDelay"
value="1000" />
</spring:bean>
</spring:property>
</spring:bean>
</spring:beans>
<jms:connector name="Active_MQ3" connectionFactory-ref="connectionFactory" acknowledgementMode="CLIENT_ACKNOWLEDGE" maxRedelivery="10" persistentDelivery="true" specification="1.1" />
<flow name="main1" doc:name="main1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" path="test" port="8099" doc:name="HTTP"/>
<logger message="starting main flow" level="INFO" doc:name="Logger"/>
<jms:outbound-endpoint queue="StudioIN" connector-ref="Active_MQ3" doc:name="JMS">
<jms:transaction action="NONE"/>
</jms:outbound-endpoint>
</flow>
//reading msg from queue, not acknowledging
<flow name="worker1" doc:name="worker1">
<jms:inbound-endpoint queue="StudioIN" connector-ref="Active_MQ1" doc:name="JMS"/>
<logger message="Consuming payload: #[payload]" level="INFO" doc:name="Logger"/>
</flow>
</mule>
在我的测试流程中,我没有确认消息,但它仍然被消耗掉了。我们如何将消息保留在队列中,直到它得到客户端或接收方的确认?
<!-------------- Updated flow ------------------------>
<flow name="worker1" doc:name="worker1">
<jms:inbound-endpoint queue="StudioIN" connector-ref="Active_MQ1" doc:name="JMS">
<jms:client-ack-transaction action="ALWAYS_BEGIN"/>
</jms:inbound-endpoint>
<logger message="Consuming payload: #[payload]" level="INFO" doc:name="Logger"/>
</flow>
【问题讨论】:
【参考方案1】:您的 JMS 入站端点中缺少 client-ack-transaction
元素。
文档在这个主题上非常薄:http://www.mulesoft.org/documentation/display/current/JMS+Transport+Reference#JMSTransportReference-Clientacktransaction
我打算为您提供使用此标签的集成测试链接,但找不到任何链接:(请参阅:https://github.com/mulesoft/mule/search?utf8=%E2%9C%93&q=client-ack-transaction&type=Code
【讨论】:
感谢您的回复。我已经尝试使用以上是关于具有 CLIENT_ACKNOWLEDGE 模式的骡子 jms?即使我没有确认消息也会自动使用的主要内容,如果未能解决你的问题,请参考以下文章
ActiveMQ(20):Consumer高级特性之重新投递(Redelivery Policy)