在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不应该执行,并且消息应该被路由到死信交换。如果消息在任何阶段都没有失败,则应将其写入队列。
答案 0 :(得分:1)
要完全按照您的预期进行操作,只需设置一个catch-exception-strategy,其出站端点指向您的DLQ。
但是,我个人宁愿利用DLQ的兔子(或你正在使用的提供者)功能:https://www.rabbitmq.com/dlx.html。
答案 1 :(得分:0)
AMQP transport提供手动邮件确认或拒绝功能(documentation)。如果您拒绝某条消息,并且该队列配置为使用DLX,那么该消息将由代理路由到那里。
尝试使用Victor Romero建议的catch-exception-strategy配置流,并使用<amqp:reject-message />
拒绝该消息。请务必将连接器配置为使用ackMode="MANUAL"
。