【问题标题】:Mule:Routing messages to dead letter exchanges for AMQP endpoint using MuleMule:使用 Mule 将消息路由到 AMQP 端点的死信交换
【发布时间】:2015-01-14 16:42:10
【问题描述】:

在 mule 中使用 AMQP 连接器并尝试实现特定用例,如果消息未通过业务过滤条件而不是将其写入输出队列,则应将其路由到死信。建议实现这一目标的最佳方法。 示例代码:

<mule>
<flow> 
<message source>
<message processor1>
<message processor2>
<message processor3>
<message processor4>
<message processor5>
<amqp:outbound-endpoint>
</flow>
</mule>

实现功能的最佳方式是,如果消息在任何消息处理器中失败,则后续消息处理器不应执行并且消息应转发到队列的死信交换。因此,假设它在消息处理器 2 中失败,则消息处理器 3,4 和 5 不应执行,并且消息应路由到死信交换。如果消息在任何阶段都没有失败,则应将其写入队列。

【问题讨论】:

    标签: rabbitmq mule amqp mule-component


    【解决方案1】:

    要完全按照您的预期进行操作,只需设置一个带有指向您的 DLQ 的出站端点的 catch-exception-strategy。

    但是,就我个人而言,我更愿意利用 rabbit 的(或您正在使用的提供者)功能进行 DLQ:https://www.rabbitmq.com/dlx.html

    【讨论】:

      【解决方案2】:

      AMQP transport 提供手动消息确认或拒绝功能 (documentation)。如果您拒绝消息,并且队列配置为使用 DLX,则消息将由代理路由到那里。

      尝试按照 Victor Romero 的建议使用 catch-exception-strategy 配置流,并使用 &lt;amqp:reject-message /&gt; 拒绝消息。请务必将连接器也配置为使用ackMode="MANUAL"

      【讨论】:

      • 我的设计中的消息处理器将是spring bean,并且将执行包含业务逻辑的特定方法,如果某些逻辑失败我需要抛出异常并且会被mule catch-exception策略捕获如果我在 spring bean 方法中没有提供 catch 块。
      • 是的,它就是这样工作的。记得在组件后面加上&lt;amqp:acknowledge-message /&gt;,因为你使用的是ackMode="MANUAL"
      猜你喜欢
      • 2012-12-17
      • 2016-03-02
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多