如何使用客户端确认来确认mule中的activemq消息?

时间:2016-09-27 06:27:02

标签: mule activemq mule-studio mule-component

下面是我的骡子配置,我想承认使用客户端acknoledge,我该怎么办?

<mule>
<jms:activemq-connector name="Active_MQ" brokerURL="tcp://localhost:61616"          validateConnections="true" doc:name="Active MQ" maxRedelivery="2"   persistentDelivery="true"/>
    <flow name="activemqFlow">
    <file:inbound-endpoint path="D:\mule\input" responseTimeout="10000" doc:name="File"/>
    <object-to-string-transformer doc:name="Object to String"/>
    <set-property propertyName="fileName" value="#[message.inboundProperties.originalFilename]" doc:name="Property"/>
    <jms:outbound-endpoint queue="logfilequeue" connector-ref="Active_MQ" doc:name="JMS">
         <jms:transaction action="NONE"/>
    </jms:outbound-endpoint>

</flow>
<flow name="JmsInboundFlow">
    <jms:inbound-endpoint queue="logfilequeue" connector-ref="Active_MQ" doc:name="JMS">
        <jms:client-ack-transaction action="ALWAYS_BEGIN"/>
    </jms:inbound-endpoint>
    <logger message="#[payload.toString()]" level="INFO" doc:name="Logger"/>
    <file:outbound-endpoint path="D:\mule\output" responseTimeout="10000" doc:name="File" outputPattern="#[message.inboundProperties.fileName]"/>
</flow>
</mule>

2 个答案:

答案 0 :(得分:1)

注意:确实要确保使用CLIENT_ACKNOWLEDGE它不像大多数人想象的那样有用。它确认当前消息和会话中的所有消息。如果您有并行/线程消费者,此设置将无意中确认尚未准备好的消息。 ActiveMQ有一个INDIVIDUAL_ACKNOWLEDGE,它只是单个消息。

JMS Spec 2.0有一个壮举请求,要求将此add'l ack模式作为标准。

答案 1 :(得分:0)

尝试在JMS连接器中添加acknowledgementMode =“CLIENT_ACKNOWLEDGE”。

您可以参考此问题以获取更多详细信息

Mule jms with CLIENT_ACKNOWLEDGE mode? Message automatically consumed even though I didn't acknoeledge it