知识卡片
消息路由失败时的三种应对方案
内容
消息从交换器路由到队列可能失败——没有匹配的绑定队列。RabbitMQ提供了三种应对方式:mandatory参数让Broker把路由失败的消息退回生产者(需要生产者注册监听器处理);immediate参数曾用来处理”队列有绑定但没有消费者”的情形,但因为会拖累镜像队列性能、增加复杂度,在3.0版本被官方废弃,建议改用TTL([[队列级与消息级TTL为何清理策略不同]])+死信队列([[死信队列与延迟队列共用同一套机制]])替代;备份交换器(Alternate Exchange)把未路由成功的消息统一转存到另一个交换器兜底,既不用复杂化生产者代码,也不会丢消息。发散:三种方案的演进轨迹是”从让调用方处理异常,到把异常处理下沉为可配置的兜底机制”。
参考来源
《RabbitMQ实战指南》第4章《RabbitMQ进阶》