这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
基于大项目要求,开始学习消息队列,因此本篇为基于直播课的消息队列笔记。
消息中间件(队列)
指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
- 发布订阅模式:一个主发布消息,其他从接收消息并执行。
- 事件驱动架构
消息队列的作用
- 异步
- 解耦
- 削峰
RocketMQ
阿里开源,java,分布式,高可靠,丰富的队列功能,大规模消息积压,社区活跃,成熟度高。 其架构为:
Broker Server:消息中转角色,负责存储信息,转发消息。 Name Server:路由消息的提供者,多个实例相互独立。 Produce Group:同一类Producer的集合,Producer发送同一类消息且发送逻辑一致。 Consumer Group:同一类Consumer的集合,消费同一类消息且消费逻辑一致。
Topic:表示一类消息的集合,是RocketMQ进行消息订阅的基本单位。
Clustering:相同Consumer Group的每Consumer实例平均分摊消息。
Broadcasting:相同Consumer Group的每个Consumer实例接收全量的消息。
Pull:主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。
Push:基于Pull模式长轮询机制实现,不是真正的push。
消息消费的具体流程:
RocketMQ其他功能。
- 死信队列:当一条消息初次消费失败,消息队列RocketMQ会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息。此时,消息队列RocketMQ不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。
- 在消息队列中,这种无法被消费的消息为死信消息(Dead-Letter Message),存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)。