2015-01-15 69 views
1

是否有人知道在AMQP连接器(Mule)的ACK模式下MULE_AUTOMANUAL之间的确切区别是什么。因为我观察到AMQP连接器中的MULE_AUTO和MANUAL之间的区别Mule ESB

  • 如果ACK模式:AMQP_AUTO - >一旦消息被拾取,它被自动删除
  • 如果ACK模式:MULE_AUTO - >消息拾取并成功传递即使之后,消息仍然存在于队列中。
  • 如果确认模式:MANUAL - >消息拾取并在队列成功传递,消息仍然存在即使在(相同的情况下等MULE_AUTO)

在MULE_AUTO和MANUAL,这两种情况下,如果我们假定删除该消息在外部。什么是确切的区别。我错过了什么。

<amqp:connector name="AMQP_Test" validateConnections="true" 
     host="***" ackMode="MULE_AUTO" 
     username="123" password="123!" /> 

任何人都可以帮助我了解它。

编辑第2次:

我保持ACK为MULE_AUTO。即使从消费的服务响应成功重新登录后,消息也不会被删除。不知道我错在哪里 请找到完成的config.xml。

<amqp:connector name="AMQP_Test" validateConnections="true" host="****" username="123" password="123!" ackMode="MULE_AUTO" doc:name="AMQP Connector"/> 

<flow name="testrabbitmqFlow1" doc:name="testrabbitmqFlow1" > 
    <amqp:inbound-endpoint queueName="amqp.test.queue" exchangeDurable="true" queueDurable="true" responseTimeout="1000000" connector-ref="AMQP_Test" doc:name="AMQP"> 
    <amqp:transaction recoverStrategy="REQUEUE" action="ALWAYS_BEGIN"/> 
    </amqp:inbound-endpoint> 
    <byte-array-to-string-transformer doc:name="Byte Array to String"/> 
    <http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8085" path="test" method="POST" responseTimeout="1000000" doc:name="HTTP"/> 
    <logger message="value in queue .. #[payload]....#[message.inboundProperties['http.status']]" level="INFO" doc:name="Logger"/> 
</flow> 

您能否让我知道我在哪里丢失?

回答

3

随着MANUAL,你必须手动ACK(或拒绝)消息,这里讨论:https://github.com/mulesoft/mule-transport-amqp/blob/master/GUIDE.md#manual-message-acknowledgement-and-rejection

在本质上,这与做:

<amqp:acknowledge-message /> 

和:

<amqp:reject-message requeue="true" /> 

对于MULE_AUTO,Mule应该在流程完成处理时自动确认消息。如果它不这样做,它肯定是一个bug。

+0

感谢您的回复。我编辑了我的问题并添加了完整的配置。这是我测试简单场景的方式。你可以看看我的编辑并提出建议。 – star

+0

根据我的实际情况,消息不应该被删除,直到我的消费服务提供'200'响应。这里甚至在获得成功响应消息之后仍然存在于队列中。 – star

+0

我选择了使用的“手动”。它按照您的建议进行所需的场景。但不知道为什么MULE_AUTO不。感谢您的回应。 – star

相关问题