我用队列设置了一个死信路由,以请求延迟数秒的被拒绝消息,防止临时使用者错误阻塞队列。我已经将其设置为工作队列和死信队列都绑定到相同的交换:

外部产生的传入消息被路由到exchange,后者将它们放置在工作队列中。在处理消息期间,用户可能会因为一些临时错误而失败(假设爬虫从网站接收错误500 )。 我们没有拒绝消息并将其再次置于队列的首位(导致无限循环),而是将被拒绝的消息(使用
requeue=0)路由到交换中,将死信队列添加为路由密钥。在这里,每条消息都接收到一个X秒的TTL,在此之后它将被拒绝,因此被路由回使用路由密钥se的交换到原始工作队列。
然而,从网上的文献和例子来看,每个人似乎都建议选择一个单独的死信交换:

外部产生的传入消息被路由到工作交换,后者将它们放置在工作队列中。如果使用者失败,消息将被拒绝(与
requeue=0一起),并将被路由到死信交换。死信交换将消息路由到死信队列,其中消息TTL将过期,而再次拒绝的消息将被路由回工作交换。
与第一种设计相比,第二种设计有什么关键优势吗?我无法识别任何信息,但我对RabbitMQ并不太有信心。
发布于 2020-10-08 11:26:19
这取决于您所使用的交换类型,以及您需要执行的其他路由。如果对原始消息和重新排队的消息使用相同的交换,则需要区分:
在我对这个模式的实现中,我使用两个额外的交换(都是按需动态声明的),以便它尽可能独立于原始路由配置:
https://stackoverflow.com/questions/64183725
复制相似问题