下面是我的骡子配置,我想承认使用客户端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>
答案 0 :(得分:1)
注意:确实要确保使用CLIENT_ACKNOWLEDGE它不像大多数人想象的那样有用。它确认当前消息和会话中的所有消息。如果您有并行/线程消费者,此设置将无意中确认尚未准备好的消息。 ActiveMQ有一个INDIVIDUAL_ACKNOWLEDGE,它只是单个消息。
JMS Spec 2.0有一个壮举请求,要求将此add'l ack模式作为标准。
答案 1 :(得分:0)
尝试在JMS连接器中添加acknowledgementMode =“CLIENT_ACKNOWLEDGE”。
您可以参考此问题以获取更多详细信息