消息队列再探|青训营笔记

93 阅读3分钟

消息队列再探|青训营笔记

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

在后面会依次倒叙回顾之前的学习课程,便于复习~

一、课程重点内容

  • 队列序章
  • 深入浅出

下面是对课程重点内容的思考与总结,有问题或者错误,可以批评指正呐~

二、队列序章

是在分布式系统中完成消息的发送和接收的基础软件。消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信

消息中间件

  • 定义:是在分布式系统中完成消息的发送和接收的基础软件。
  • 拓展:消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信

发布订阅模式

  • 定义:用于定义对象之间的一对多依赖关系,以便当一个对象改变状态时,自动通知并更新其所有依赖项。

事件驱动架构-EDA

  • 定义:事件驱动的体系结构是一种体系结构风格,其中传入的系统请求被收集到一个或多个中心事件队列中。事件从事件队列转发到处理事件的后端服务。

消息队列的作用

  • 异步
  • 解耦
  • 削峰

三、深入浅出

  • RocketMQ

    • 特点

      • 阿里开源
      • Java语言编写
      • 分布式,高可靠
      • 丰富的队列功能
      • 大规模消息积压
      • 社区活跃,成熟度高
    • 算法实现:

      • Broker Server:消息中转角色,负责存储消息,转发消息

      • Name Server:路由消息的提供者,多个实例相互独立

      • Producer Group:同一类Producer的集合,Producer发送同一类消息且发送逻辑一致

      • Consumer Group:同一类Consumer的集合,Consumer消费同一类消息且消费逻辑一致

      • Topic:表示一类消息的集,是RocketMQ进行消息订阅的基本单位

    image-20230211221512734.png

    • 高级特性

      • 死信队列:

        • 不会再被消费者正常消费有效期与正常消息相同,均为 3 天,3 天后会被自动删除。
        • 因此,请在死信消息产生后的 3 天内及时处理一个死信队列对应一个 Group ID, 而不是对应单个消费者实例如果一个 Group ID 未产生死信消息。
        • 消息队列 RocketMQ 不会为其创建相应的死信队列一个死信队列包含了对应 Group ID 产生的所有死信消息,不论该消息属于哪个 Topic
      • 顺序消息:

        • 对于顺序消息,当消费者消费消息失败后,消息队列 RocketMQ 会自动不断进行消息重试(每次间隔时间为 1 秒),这时,应用会出现消息消费被阻塞的情况。因此,在使用顺序消息时,务必保证应用能够及时监控并处理消费失败的情况,避免阻塞现象的发生。

四、课程总结

借用老师的一句话,”兵无常势,水无常形,运用之妙,存乎一心也“,究竟该如何选用消息队列是取决于我们的想法而已罢了。