使用 ackMode MULE_AUTO 在 Mule ESB AMQP 连接器中拒绝和重新排队消息

Reject and requeue message in Mule ESB AMQP Connector with ackMode MULE_AUTO

我的用例是通过 SMTP 出站端点发送邮件。

我将 Mule AMQP 连接器与 ackMode="MULE_AUTO" 一起使用。

我试过使用回滚异常策略,但这似乎不起作用。

有谁知道是否可以拒绝邮件并重新排队?

(Mule ESB CE 3.7.0 - Mule AMQP 传输 3.6.2.20150520)

是的,这是可能的。

您需要使用ackMode=Manual

1) 对于成功场景:您需要在流程结束时使用 <amqp:acknowledge-message /> 手动确认消息,或者您认为逻辑消息可以被确认的地方。

2) 对于失败场景:验证错误等,当异常抛出时,它将被捕捉异常策略 - 使用 <amqp:reject-message /> 。它有助于拒绝消息。

3)对于连接异常:在捕获异常策略中使用<amqp:reject-message requeue="true" />,这将再次将原始消息推回同一个队列。参考:https://github.com/mulesoft/mule-transport-amqp/blob/master/GUIDE.md#manual-message-acknowledgement-and-rejection

第二种和第三种情况都需要在异常策略中处理。所以使用 ChoiceException strategy where in use 2 catch exception strategy 为 'validation error' 定义一个,另一个为 'connection Exception'。参考:https://docs.mulesoft.com/mule-user-guide/v/3.7/choice-exception-strategy

注意:使用Manual ack时,无论success/failure场景如何,都需要手动对外确认或拒绝消息。遗漏任何消息都将保留在队列中。