骡子的JMS CLIENT_ACKNOWLEDGE模式? 信息自动消耗,即使我没有acknoel

2019-10-20 19:08发布

我已经创建了CLIENT_ACKNOWLEDGE模式简单的骡子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>

Answer 1:

你错过了一个client-ack-transaction在您的JMS入站终结点元素。

该文档是关于这个问题的非常薄: 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&类型=代码



文章来源: Mule jms with CLIENT_ACKNOWLEDGE mode? Message automatically consumed even though I didn't acknoeledge it
标签: jms mule