消息队列再探|青训营笔记
这是我参与「第五届青训营」伴学笔记创作活动的第16天
在后面会依次倒叙回顾之前的学习课程,便于复习~
一、课程重点内容
- 队列序章
- 深入浅出
下面是对课程重点内容的思考与总结,有问题或者错误,可以批评指正呐~
二、队列序章
是在分布式系统中完成消息的发送和接收的基础软件。消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信
消息中间件
- 定义:是在分布式系统中完成消息的发送和接收的基础软件。
- 拓展:消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信
发布订阅模式
- 定义:用于定义对象之间的一对多依赖关系,以便当一个对象改变状态时,自动通知并更新其所有依赖项。
事件驱动架构-EDA
- 定义:事件驱动的体系结构是一种体系结构风格,其中传入的系统请求被收集到一个或多个中心事件队列中。事件从事件队列转发到处理事件的后端服务。
消息队列的作用
- 异步
- 解耦
- 削峰
三、深入浅出
-
RocketMQ
-
特点
- 阿里开源
- Java语言编写
- 分布式,高可靠
- 丰富的队列功能
- 大规模消息积压
- 社区活跃,成熟度高
-
算法实现:
-
Broker Server:消息中转角色,负责存储消息,转发消息
-
Name Server:路由消息的提供者,多个实例相互独立
-
Producer Group:同一类Producer的集合,Producer发送同一类消息且发送逻辑一致
-
Consumer Group:同一类Consumer的集合,Consumer消费同一类消息且消费逻辑一致
-
Topic:表示一类消息的集,是RocketMQ进行消息订阅的基本单位
-
-
高级特性
-
死信队列:
- 不会再被消费者正常消费有效期与正常消息相同,均为 3 天,3 天后会被自动删除。
- 因此,请在死信消息产生后的 3 天内及时处理一个死信队列对应一个 Group ID, 而不是对应单个消费者实例如果一个 Group ID 未产生死信消息。
- 消息队列 RocketMQ 不会为其创建相应的死信队列一个死信队列包含了对应 Group ID 产生的所有死信消息,不论该消息属于哪个 Topic
-
顺序消息:
- 对于顺序消息,当消费者消费消息失败后,消息队列 RocketMQ 会自动不断进行消息重试(每次间隔时间为 1 秒),这时,应用会出现消息消费被阻塞的情况。因此,在使用顺序消息时,务必保证应用能够及时监控并处理消费失败的情况,避免阻塞现象的发生。
-
-
四、课程总结
借用老师的一句话,”兵无常势,水无常形,运用之妙,存乎一心也“,究竟该如何选用消息队列是取决于我们的想法而已罢了。