1. RabbitMQ架构
- Publisher - 生产者:发布消息到RabbitMQ中的Exchange
- Consumer - 消费者:监听RabbitMQ中的Queue中的消息
- Exchange - 交换机:和生产者建立连接并接收生产者的消息
- Queue - 队列:Exchange会将消息分发到指定的Queue,Queue和消费者进行交互
- Routes - 路由:交换机以什么样的策略将消息发布到Queue
2. 如何避免消息丢失
-
消息的丢失,在mq角度考虑,有三种途径
1.生产者确认发送到mq服务器,生产者确认机制
2.mq服务器不丢数据(队列消息持久化)
3.消费者确认消费掉消息(消费者确认机制) 生产者/消费者保证消息不丢失有两种实现方式
bash 1.开启事务模式 2.消息确认模式 两种方式比较:事务回降低性能,一般使用消息确认模式
4.生产者如何将消息可靠投递到MQ?
1.Client发送消息给MQ
2.MQ将消息持久化后,发送Ack消息给Client,此处有可能因为网络问题导致Ack消息无法发送到Client,那么Client在等待超时后,会重传消息;
3.Client收到Ack消息后,认为消息已经投递成功。5 . MQ如何将消息可靠投递到消费者?
1.MQ将消息push给Client(或Client来pull消息)
2.Client得到消息并做完业务逻辑
3.Client发送Ack消息给MQ,通知MQ删除该消息,此处有可能因为网络问题导致Ack失败,那么Client会重复消息,这里就引出消费幂等的问题;
4.MQ将已消费的消息删除
备注: - confirm机制:保证消息到达exchange
- return机制: 保证消息到达队列