系统架构
![8d93608aafa8da0c08a1f686aa31ac96.png](https://i-blog.csdnimg.cn/blog_migrate/25fbca0d5598399afb18d27c6cd3a65a.jpeg)
Topic:消息的主题,由用户定义并在服务端配置,producer发送消息到某个topic
下, consumer从相应的topic中消费消息
1、Name Server:无状态节点,用于集群化管理topic路由信息及broker节点信息
2、Broker:负责消息存储与转发,同时与所有的name server维持心跳
3、Producer:与name server集群中随机一个节点建立长连接,并定期获取topic与broker所维护的路由关系;同时与master broker维持心跳
4、 Consumer:与name server集群中随机一个节点建立长连接,并定期获取topic与broker所维护的路由关系;同时根据订阅规则与所有的broker维持心跳
消息发送的高可用
![4dc32a46360916b894170758a136ce2e.png](https://i-blog.csdnimg.cn/blog_migrate/9ee6bee4e8f4713a371845e562d4454c.jpeg)
![e290ae6d74ea25dd06db488dc18bf52c.png](https://i-blog.csdnimg.cn/blog_migrate/650eb4569aefec469b25820a7523fdef.jpeg)
消息消费的高可用
![9b9b66fbe2a01b116453a0a159ea4557.png](https://i-blog.csdnimg.cn/blog_migrate/9bfa7bb69cfc065db88bc6da26e4e88f.jpeg)
Broker自动切换机制:
当Master不可用或者繁忙的时候,自动切换到从Slave 读
消费重试:
1、集群模式
默认16次重试
(实现原理与延时消费一致)
2、广播模式
不提供重试机制
死信队列
定义:当消息消费达到最大重试次数后,这种无法被正常消费的消息称为死信消息,存储死信消息的特殊队列称为死信队列。
特征:
1、不会再被消费者正常消费
2、有效期与正常消息相同,均为 3 天,3 天后会被自动删除
3、死信队列对应一个 Group ID, 而不是对应单个消费者实例
不论该消息属于哪个 Topic
如何正确处理死信消息:
1、选择重新发送消息
2、监听死信队列,将数据打印到控制台
消息消费幂等操作
幂等概念:是一个数学与计算机学的概念,常见于抽象代数中。
通俗的讲就是针对一个操作,不管做多少次,产生效果或返回的结果都是一样的。
消息幂等的必要性:
由于网络抖动或客户端异常,无法保证消息的不重复性
消息幂等处理方式:
1、消息去重(唯一索引、状态机幂等)
2、分布式锁机制
3、消息ACK机制