我已经阅读了RabbitMQ及其处理在消费者处处理失败的事件的技术(未确认的消息、过期的ttl-s等)。RabbitMQ DLX
工作的方式是(据我所知)设置一个死信交换到处理队列。到目前为止一切顺利,当事件失败时,我可以看到死信队列正在那里保存它的消息。
但是我如何使用这些保存在那里的消息呢?!在我的例子中,我想在dlq中的TTL过期后重新处理它们,但是在.NET Core(C#)中,我找不到一种方法或实现如何实现这一点。我也可以同意其他解决方案,比如创建一个后台工作线程来检查死消息等。
这可以实现吗?如果可以,请帮助我了解我需要做些什么来实现这一点
2条答案
按热度按时间92vpleto1#
您需要配置一个“死信队列”来处理被拒绝或未送达的消息。使用RabbitMQ客户端库,您可以将一个使用者绑定到该配置的队列并从中检索消息。从那里,您可以在代码中决定要做什么来重新处理/完全拒绝它们。
我找到了一个有用的分步指南,您可以按照其中的详细信息:https://medium.com/nerd-for-tech/dead-letter-exchanges-at-rabbitmq-net-core-b6348122460d
nzrxty8p2#
您可能希望考虑将原始q的源交换附加为dlq的DL交换,这使得原始q和dlq成为彼此的DLQ,从而形成重试循环。
添加的dlq用作重试消息的临时存储,以及具有TTL机制的重试延迟缓冲区。在dlq中超时的消息将自动推回到原始q以进行重试。原始q的使用者处理第一次和重试消息。
为了避免无限的重试循环,将在消息中设置重试计数器;并且原始Q的消费者需要基于该计数器最终中断重试循环。