AMQP 连接器 Mule ESB 中 MULE_AUTO 和 MANUAL 之间的区别
Difference between MULE_AUTO and MANUAL in AMQP connector Mule ESB
有谁知道在 AMQP 连接器(Mule)的 ACK 模式下 MULE_AUTO
和 MANUAL
之间的确切区别是什么。因为我观察到
- 如果 ACK 模式:AMQP_AUTO -> 一旦消息被拾取,它被自动删除
- 如果 ACK Mode:MULE_AUTO -> 即使消息被成功提取和传递,消息仍然存在于队列中。
- 如果确认模式:MANUAL -> 即使在成功拾取并传递消息后,消息仍然存在于队列中。(与 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>
你能告诉我我到底错过了什么吗?
使用 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 应该在流程完成处理后自动确认消息。如果不行,那就是bug了。
有谁知道在 AMQP 连接器(Mule)的 ACK 模式下 MULE_AUTO
和 MANUAL
之间的确切区别是什么。因为我观察到
- 如果 ACK 模式:AMQP_AUTO -> 一旦消息被拾取,它被自动删除
- 如果 ACK Mode:MULE_AUTO -> 即使消息被成功提取和传递,消息仍然存在于队列中。
- 如果确认模式:MANUAL -> 即使在成功拾取并传递消息后,消息仍然存在于队列中。(与 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>
你能告诉我我到底错过了什么吗?
使用 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 应该在流程完成处理后自动确认消息。如果不行,那就是bug了。