使用 RabbitMQ 死信队列消息

问题描述 投票:0回答:2

我读过 RabbitMQ 及其处理消费者无法处理的事件的技术(未确认的消息、过期的 ttl-s 等)。 RabbitMQ DLX

其工作方式(据我了解)是将死信交换设置到处理队列。 到目前为止一切顺利,当事件失败时,我可以看到死信队列正在将其消息保存在那里。

但是我如何使用保存在那里的这些消息?! 就我而言,我想在 dlq 中的 TTL 过期后重新处理它们,但在 .NET Core (C#) 中,我找不到实现此目的的方法或实现。 我也可以同意其他解决方案,例如创建后台工作人员来检查死消息等。

这可以实现吗?如果是,请帮助我了解我需要做什么才能使其正常工作

c# .net rabbitmq event-bus
2个回答
0
投票

您需要配置一个“死信队列”来处理已被拒绝或未送达的消息。使用 RabbitMQ 客户端库,您可以将使用者绑定到配置的队列并从中检索消息。从那里,您可以在代码中决定要做什么来完全重新处理/拒绝它们。

我找到了一个有用的分步指南,供您更详细地遵循:https://medium.com/nerd-for-tech/dead-letter-exchanges-at-rabbitmq-net-core-b6348122460d


0
投票

您可能需要考虑将原始 q 的源交换附加为 dlq 的 DL 交换,这使得原始 q 和 dlq 彼此成为 DLQ,形成重试循环。

增加的dlq作为重试消息的临时存储,以及带有TTL机制的重试延迟缓冲区。 dlq 中超时的消息会自动推送回原始 q 进行重试。原始 q 的消费者处理首次消息和重试消息。

为了避免无限循环重试,会在消息中设置重试计数器;原始 q 的使用者最终需要打破基于该计数器的重试循环。

© www.soinside.com 2019 - 2024. All rights reserved.