Mule:Routing 消息到使用 Mule 的 AMQP 端点的死信交换
Mule:Routing messages to dead letter exchanges for AMQP endpoint using Mule
在 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 不应执行并且消息应路由到死信交换。如果消息在任何阶段都没有失败,则应将其写入队列。
要完全按照您的预期进行,只需设置一个带有指向您的 DLQ 的出站端点的 catch-exception-strategy。
但是,就我个人而言,我更愿意利用 rabbit(或您正在使用的提供商)的 DLQ 功能:https://www.rabbitmq.com/dlx.html .
AMQP transport provides a feature for manual message acknowledgement or rejection (documentation)。如果您拒绝消息,并且队列配置为使用 DLX,则消息将由代理路由到那里。
尝试按照 Victor Romero 的建议使用 catch-exception-strategy 配置流程,并使用 <amqp:reject-message />
拒绝消息。请务必将连接器配置为使用 ackMode="MANUAL"
。
在 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 不应执行并且消息应路由到死信交换。如果消息在任何阶段都没有失败,则应将其写入队列。
要完全按照您的预期进行,只需设置一个带有指向您的 DLQ 的出站端点的 catch-exception-strategy。
但是,就我个人而言,我更愿意利用 rabbit(或您正在使用的提供商)的 DLQ 功能:https://www.rabbitmq.com/dlx.html .
AMQP transport provides a feature for manual message acknowledgement or rejection (documentation)。如果您拒绝消息,并且队列配置为使用 DLX,则消息将由代理路由到那里。
尝试按照 Victor Romero 的建议使用 catch-exception-strategy 配置流程,并使用 <amqp:reject-message />
拒绝消息。请务必将连接器配置为使用 ackMode="MANUAL"
。