AMQP连接器Mule ESB中MULE_AUTO和MANUAL的区别

时间:2015-01-15 22:40:47

标签: mule amqp mule-studio mule-el mule-component

是否有人知道AMQP连接器(Mule)的ACK模式中MULE_AUTOMANUAL之间的确切差异。因为我观察到了

  • 如果是ACK模式:AMQP_AUTO - >一旦收到邮件,它就会被自动删除
  • 如果ACK模式:MULE_AUTO - >即使在邮件被选中并成功发送后,邮件仍然存在于队列中。
  • 如果确认模式:手动 - >即使在收到消息并成功发送后,消息仍然存在于队列中。(与MULE_AUTO相同的情况)

在MULE_AUTO和MANUAL中,两种情况都应该从外部删除消息。什么是确切的区别。我错过了什么。

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

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

第二次编辑:

我将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>

你能告诉我我错过的地方吗?

1 个答案:

答案 0 :(得分:3)

使用MANUAL,您必须手动确认(或拒绝)消息,如下所述: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应在流程完成处理时自动确认消息。如果它没有这样做,那么它肯定是一个错误。