当前位置: 首页 > news >正文

Rocketmq消息队列 消息模型 详解

消息队列模型

两种消息模型

队列模型

队列模型是最开始的一种消息队列模型,对应着消息队列“发-存-收”的模型。生产者往某个队列里面发送消息,一个队列可以存储多个生产者的消息,一个队列也可以有多个消费者,但是消费者之间是竞争关系,也就是说每条消息只能被一个消费者消费

在这里插入图片描述

发布/订阅模型

在发布-订阅模型中,消息的发送方称为发布者(Publisher),消息的接收方称为订阅者(Subscriber),服务端存放消息的容器称为主题(Topic)。发布者将消息发送到主题中,订阅者在接收消息之前需要先“订阅主题”。“订阅”在这里既是一个动作,同时还可以认为是主题在消费时的一个逻辑副本,每份订阅中,订阅者都可以接收到主题的所有消息。

RocketMQ 的消息模型

RocketMQ 使用的消息模型是标准的发布-订阅模型

RocketMQ 本身的消息是由下面几部分组成:

NameServer:

生产者,消费者,Broker都会在NameServer进行注册,并向NameServer发送心跳包,NameServer可搭建集群,但是节点之间不进行互相通讯,每个Broker与NameServer 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 NameServer。

Broker:

消息存储与转发服务器,负责实际的消息读写、持久化、高可用同步。

接收消息,消息持久化,提供消息

Producer:

生产者,生产消息,向NameServer询问Broker地址,然后往Broker发送消息。Producer 与 NameServer 集群中的其中一个节点(如果这个节点挂了,就向其它节点建立连接,配置文件可以指定多个NameServer信息)建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。Producer 完全无状态。

Consumer:

Consumer 与 NameServer 集群中的其中一个节点建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave发送心跳。Consumer 既可以从 Master 订阅消息,也可以从Slave订阅消息。

Message:

消息本身

Topic:

消息主题,用于隔离数据,需要集群内唯一,Topic是逻辑概念,物理上对应多个Queue

Queue:

消息队列,属于某个topic,例如某个topic有三条queue,生产者投递消息时会负载均衡(默认轮询)给这三个queue,也就是说queue是topic实际存储消息的地方,queue支持动态扩展,queue是为了加快topic的消费速度

Tag:

消息的某个属性,对Topic的进一步细分,例如订单topic可以分成创建订单tag、取消订单tag、支付订单tag

Offset:

Offset分为消息点位和消费点位

  • 消息点位就是消息在queue中的偏移量,每个队列有自己的最小消息点位和最大消息点位,内存不够时就回滚最小的消息。
  • 消费点位消费者首次订阅时可以指定从哪个offset开始消费。
    • 集群模式下同一消费者组的消费者的offset应该是一样的offset,由broker以消费者组级别为粒度进行管理,消费者也可以在消费完消息后手动提交offse
    • 广播模式下每个消费者本地自己维护offset

生产消息类型:

同步发送:需要等待MQ的响应结果

异步发送:设置成功和失败的回调函数即可

单向发送:直接发送,不管是否成功

消费消息类型:

集群消费:每条消息只会被订阅了这个topic的每个消费者组中的某一个消费者消费,如有消费者组A和组B和组C,则从组A、组B、组C中分别挑一个消费者出来消费。如果消费失败,不保证每一次重投到同一台机器上

广播消费:每条消息会被订阅了这个topic的每个消费者组中的所有消费者消费,如有消费者组A和组B和组C,则组A、组B、组C中所有的消费者都要消费这条消息

相关文章:

  • [论文阅读] 人工智能+软件工程 | MemFL:给大模型装上“项目记忆”,让软件故障定位又快又准
  • 在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven)
  • 探秘半导体制造设备钢结构防震基座的承重奥秘-江苏泊苏系统集成有限公司
  • 好得睐:以品质守味、以科技筑基,传递便捷与品质
  • vue-18(使用 Vuex 插件实现高级功能)
  • 51单片机基础部分——独立按键检测
  • 用 n8n 提取静态网页内容:从 HTTP Request 到 HTML 节点全解析
  • JavaSec-SSTI - 模板引擎注入
  • 【Linux网络篇】:从HTTP到HTTPS协议---加密原理升级与安全机制的全面解析
  • vscode 离线安装第三方库跳转库
  • Spark 写文件
  • 记一个判决书查询API接口的开发文档
  • 软件测试全攻略:Postman工具的使用
  • 关于easyexcel动态下拉选问题处理
  • exp1_code
  • BT Panel密码修改
  • Python Excel 文件处理:openpyxl 与 pandas 库完全指南
  • (LeetCode 每日一题) 1061. 按字典序排列最小的等效字符串 (并查集)
  • 金融系统功能测试:科技赋能,安全护航
  • 【C++ Qt】窗口(Qt窗口框架、菜单栏QMenuBar)
  • 日照网站建设官方网站/百度app下载安装 官方
  • 网站安全解决方案/定制开发公司
  • dw网页设计成品免费学霸/重庆seo教程博客
  • wordpress 导航栏图标/百度关键词优化系统
  • 学做预算网站/百度企业推广怎么收费
  • 国内永久在线免费建站/2022拉人头最暴利的app