使用ackMode MULE_AUTO拒绝并重新排列Mule ESB AMQP Connector中的消息

时间:2016-06-17 08:59:13

标签: mule amqp mule-component

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

  • 当一切正常时,消息被确认,
  • 当验证错误(例如格式错误的电子邮件)时,我想拒绝该消息,
  • 当SMTP服务器存在ConnectionException时,我想等待1分钟,拒绝并重新排队邮件以再试一次。

我使用带有ackMode="MULE_AUTO"的Mule AMQP Connector。

  • 当正确处理流时,Mule会自动确认该消息。
  • 当捕获异常策略发生错误时,消息将被拒绝并发送到死信交换(无重新排队)。

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

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

(Mule ESB CE 3.7.0 - Mule AMQP Transport 3.6.2.20150520)

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。

您需要使用ackMode=Manual

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

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

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

第二个和第三个场景都需要在异常策略中处理。因此,请使用ChoiceException strategy使用其中catch exception strategy定义一个用于验证错误&#39;和其他与连接异常&#39;。参考:https://docs.mulesoft.com/mule-user-guide/v/3.7/choice-exception-strategy

注意:使用Manual ack时,无论成功/失败情况如何,都需要在外部手动确认或拒绝消息。缺少任何保留队列中的消息。