消息流转流程
-
发送者不能直接将消息发送给最终队列,必须发送给交换机;
-
消息根据路由规则,消息由交换机转发给队列;
-
消费者从队列将消息取走
合理的交换机和队列设置
- 交换机数量不能过多,一般来说同一个业务,或者同一类业务使用同一个交换机;
- 合理设置队列数量,一般来说一个微服务监听一个队列,或者一个微服务的一个业务监听一个队列;
- 合理设置交换机类型,使用Topic模式时仔细设置绑定键;
RabbitMQ的问题
消息真的发出去了么?
需要使用RabbitMQ发送端确认机制
消息真的被路由了么?
需要使用RabbitMQ消息返回机制
,确认消息被正确路由
消费端真的处理过来吗?
需要使用RabbitMQ消费端限流机制
,限制消息推送速度,保障接收端服务稳定;
消费端处理异常怎么办?
需要使用RabbitMQ消费端确认机制
,确认消息被正确处理;
队列爆满怎么办?
- 默认情况下,消息进入队列之后会永远存在,直到被消费;
- 需要使用RabbitMQ
消息过期时间
,防止消息被大量积压;
如何转移过期消息?
- 消息被设置了过期时间,过期后是会被直接丢弃的;
- 直接被丢弃的消息,无法对系统运行异常发出警报;
- 需要使用RabbitMQ
死信队列
,收集过期消息,以供分析;