笔记标题 | 青训营笔记

34 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

基于大项目要求,开始学习消息队列,因此本篇为基于直播课的消息队列笔记。

消息中间件(队列)

指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

  • 发布订阅模式:一个主发布消息,其他从接收消息并执行。
  • 事件驱动架构

消息队列的作用

  • 异步
  • 解耦
  • 削峰

RocketMQ

阿里开源,java,分布式,高可靠,丰富的队列功能,大规模消息积压,社区活跃,成熟度高。 其架构为:

image.png

Broker Server:消息中转角色,负责存储信息,转发消息。 Name Server:路由消息的提供者,多个实例相互独立。 Produce Group:同一类Producer的集合,Producer发送同一类消息且发送逻辑一致。 Consumer Group:同一类Consumer的集合,消费同一类消息且消费逻辑一致。

image.png Topic:表示一类消息的集合,是RocketMQ进行消息订阅的基本单位。 Clustering:相同Consumer Group的每Consumer实例平均分摊消息。 Broadcasting:相同Consumer Group的每个Consumer实例接收全量的消息。 Pull:主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。 Push:基于Pull模式长轮询机制实现,不是真正的push。

消息消费的具体流程: image.png

RocketMQ其他功能。

  • 死信队列:当一条消息初次消费失败,消息队列RocketMQ会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息。此时,消息队列RocketMQ不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。
  • 在消息队列中,这种无法被消费的消息为死信消息(Dead-Letter Message),存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)。