Mor*_*ich 6 architecture rabbitmq dead-letter
我在队列中设置了死信路由,以延迟几秒钟重新排队被拒绝的消息,从而防止临时消费者错误堵塞队列。我已经设置了这个,所以工作队列和死信队列都绑定到同一个交换:
外部产生的传入消息被路由到交换器,交换器将它们放入工作队列中。在处理消息期间,消费者可能会由于一些临时错误而失败(想象一下爬虫从网站收到错误 500)。
我们不是拒绝消息并将其再次放置在队列的头部(导致无限循环),而是将拒绝的消息(带有requeue=0)路由到交换器,添加死信队列作为路由键。在这里,每条消息都会收到 X 秒的 TTL,之后该消息将被拒绝,并因此使用路由键 se 路由回原始工作队列的交换器。
然而,查看网上的文献和示例,每个人似乎都建议路由到单独的死信交换:
外部产生的传入消息被路由到工作交换,工作交换将它们放入工作队列中。如果消费者失败,消息将被拒绝(带有
requeue=0),并将被路由到死信交换。死信交换器将消息路由到死信队列,消息 TTL 将在死信队列中过期,再次被拒绝的消息将被路由回工作交换器。
与第一个设计相比,第二个设计有一些关键的优势吗?我无法识别任何内容,但话又说回来,我对 RabbitMQ 不太有信心。
这取决于您使用的交换类型以及您需要执行的其他路由。如果您对原始消息和重新排队的消息使用相同的交换,则需要区分:
在此模式的实现中,我使用了两个额外的交换(均按需动态声明),以便它尽可能独立于原始路由配置:
| 归档时间: |
|
| 查看次数: |
2667 次 |
| 最近记录: |