RocketMQ基本概念

RocketMQ基本概念

  • 前言
  • RocketMQ中的基本概念
    • 主题(Topic)
      • 标签(Tag)
    • 生产者(Producer)
      • 生产者组(Producer-Group)
    • 消费者 (Consumer)
      • 消费者组(Consumer-Group)
    • 消息代理(Broker)
    • 消息队列(Queue)
      • Broker - Topic - Queue的关联以及分片的概念
      • 分片
    • 命名服务(NameServer)

前言

在前文简单介绍了RocketMQ的起源以及优缺点,本文旨在介绍其相关的基本概念,诸如:消费者(Consumer),生产者(Producer),消息代理(Broker),主题(Topic)等。

当然大家也可以查看RocketMQ的官网的官方文档

在这里插入图片描述

RocketMQ中的基本概念

主题(Topic)

每个消息(Message)都必须要有一个主题(Topic),该主题标识了消息的类型RocketMQ会根据该类型,将同类型的消息放到一起

比如我们有一个仓库的管理系统,这里有两个子模块:出库模块入库模块

出库模块会记录货物的出库信息,那么我们可以创建一个出库的主题,用于标识出库消息

同样的对于入库模块也可以创建一个入库的主题

如下图所示
在这里插入图片描述

标签(Tag)

用于区分同一主题不同类型的消息,当同一主题下的消息需要区分时,那么我们可以使用该标签将消息区分得更加精细

比如我的出库量很大,全国各地的货物都有,那么我们可以在出库消息中的再加一个地区的标签,用于区分
在这里插入图片描述

生产者(Producer)

这个比较容易理解,产生消息的模块即为消息的生产者(Producer)

比如我们上面的出库模块和入库模块都是消息的生产者

生产者组(Producer-Group)

可以生产同一主题消息的多个生产者,我们称之为生产者组 Producer-Group

在这里插入图片描述
这里需要注意的是,一个生产者可以生产多个主题的消息的,并不是一个生产者只能生产一种主题的消息。

比如有的仓库可能出库的时候,不仅要产生出库消息,还要收费,还要产生一个支付消息给支付模块

那么就

消费者 (Consumer)

消息的处理者就是消费者(Consumer)
当一个消费者订阅了某个主题的消息,那么就会去获取该主题下的消息并进行处理,也就是我们说的消费消息
当然,也可以精确到订阅某个主题下的标签,从而处理带有这种标签的消息

比如我们上述的出库消息,假设我们还有一个接收该出库消息的模块,用于持久化消息将出库消息里面的出库信息写入到我们的数据库中,称之为持久化模块

那么该模块会从RocketMQ中获取出库这个主题下的消息。然后进行持久化处理。

消费者组(Consumer-Group)

可以处理同一主题消息的多个消费者,我们称之为消费者组(Consumer-Group)

与前面生产者类似
在这里插入图片描述

值得注意的是,消费者一般是以消费者组出现的。

还有就是与生产者类似,消费者可以订阅多个主题下的消息进行消费。

但是一组消费者需要订阅相同的主题,否则会造成消费紊乱,甚至消息丢失

消费者组的优点在于容错和负载均衡

因为存在多个消费者,当一个消费者模块瘫痪时其他消费者会继续消费消息,不会造成消息的堆积。
并且由于存在多个消费者,消息会被比较均匀地分配给每个消费者,从而达到负载均衡。(并不是以消息为单位分配,而是以后面的Queue为单位分配)

消息代理(Broker)

负责存储以及转发消息。

生产者产生的消息会先放在这里,消费者组也是从这里拿消息。

如以下这样:
在这里插入图片描述
可以简单的理解为一个存储消息主机

消息队列(Queue)

存放消息的物理实体,同时也是消息物理管理单位

我们知道消息是存放在Broker上的,但是其存形式并不是以单个消息存在,而是以Queue的形式存在的。

同一主题下可以存在多个Queue,每个Queue中的消息数量大致相等,如以下这样
在这里插入图片描述

值得注意的是:生产者产生消息是放到Queue中的,消费者消费消息也是在Queue中进行。也就是生产者和消费者的操作都直接与Queue直接挂钩。

并且一个Queue只能被同一消费者组中的一个消费者消费,也就不存在同一消费者组中的两个消费者消费同一Queue的情况。

Broker - Topic - Queue的关联以及分片的概念

分片

在这里再介绍一下分片的概念。

在上面的描述中,我们知道一个Broker约等于一个主机,当我们有多个RocketMQ的主机(集群)时,这些主机上的主题可能是相同的

也就是我的Broker1上存在有出库和入库类型两个主题Broker2也可以存在这两个主题。我们把同一主题,不同Broker里的主题称之为该主题的一个分片

用图表示会更好理解:
在这里插入图片描述
在上图中我们的出库主题存在于两个Broker上,那么每个Broker下的出库主题都是该主题的一个分片

命名服务(NameServer)

在知道上述Broker、Topic的关系之后,我们会有这么一个疑问:消费者和生产者该怎么确定哪些Topic存在于哪些主题上呢

消费者举例:我来消费订阅的主题下的消息,我要去哪些Broker下获取消息消费,我怎么知道哪些Borker中有我订阅的主题呢?

而这件事就是我们的NameServer的主要功能之一。

NameServer是一个Broker与Topic路由注册中心,其的作用是提供轻量级的名称服务维护Broker、Producer和Consumer的路由信息,协调各个角色的通信等。

其具体功能可大致分为以下几部分:

  • 路由注册Broker在启动时,会向NameServer集群中每个节点注册自己的信息,并定期发送心跳包更新自己的状态。NameServer会维护一个Broker表记录Broker的信息和存活时间

  • 路由剔除:如果Broker关闭或者异常NameServer会检测到连接断开或者心跳超时,然后将该Broker从Broker表中移除,避免给客户端提供错误的路由信息。

  • 路由发现Producer和Consumer发送或者消费消息时,需要根据Topic获取路由信息,包括Topic下有哪些Queue,这些Queue分布在哪些Broker上等。NameServer会根据Broker表提供最新的路由信息给客户端客户端也会定期从NameServer拉取路由信息,保证数据的最终一致性。

  • 动态扩展: 当新的 Broker 加入 RocketMQ 系统时,或者有 Broker 离开系统时NameServer 负责更新系统的路由信息,而不需要重新启动从而实现动态扩展。这使得 RocketMQ 具备了动态扩展的能力,系统可以适应不同规模和变化的需求。

  • 负载均衡NameServer消息队列的负载均衡提供了支持。它会记录每个 Broker 上的队列信息,帮助系统实现消息的均匀分发,确保每个队列的负载相对均衡。这有助于提高整个系统的性能和稳定性。

后续的消息的种类以及其消费模式我就放在下一篇文章里了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/139621.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构--图解单链表

学习链表最重要的就是会画图,尤其是要理解链表的逻辑结构和物理结构,理解链表的底层原理才能使用的如鱼得水。 希望这篇文章可以帮助各位,记得关注收藏哦;若发现问题希望私信博主,十分感谢。 当然学习链表是需要大家对…

分享一些有趣的MATLAB提示音(代码可直接复制)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…

江门車馬炮汽车金融中心 11月11日开张

江门车马炮汽车金融中心于11月11日正式开张,这是江门市汽车金融服务平台,旨在为广大车主提供更加便捷、高效的汽车金融服务。 江门市作为广东省的一个经济发达城市,汽车保有量持续增长,但车主在购车、用车、养车等方面仍存在诸多不…

JSON.parse --- 搜索框

一 &#xff0c; JSON.parse this.num_normsTwo JSON.parse(res.result.normsTwo) 二. 搜索框 <template><div class"app-container"><span style"margin-left:120px;margin-right: 20px;width: 100px; display: inline-block;">物…

【现场问题】datax中write部分为Oracle的时候插入clolb类型字段,插入的数据为string且长度过场问题

datax的Oraclewriter 报错显示查询报错展示查找datax中的数据插入模块 报错显示 occurred during batching: ORA-01704: string literal too long 查询报错展示 基本上查到的都是这样的&#xff0c;所以锁定是clob的字段类型的问题&#xff0c;而且是只有Oracle出问题&#…

竞赛 题目:垃圾邮件(短信)分类 算法实现 机器学习 深度学习 开题

文章目录 1 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的垃圾邮件分类 该项目…

【python】Django——django简介、django安装、创建项目、快速上手

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ Django基础——django安装、创建django项目、django快速上手 django简介django安装1. conda创建环境pydjango2. pip安装django3. django目录 创建项目1. 打开终端(cmd)2. 进入某个目录3.创建项目命令4.django项目…

MS321V/358V/324V低压、轨到轨输入输出运放

MS321V/MS358V/MS324V 是单个、两个和四个低压轨到轨输 入输出运放&#xff0c;可工作在幅度为 2.7V 到 5V 的单电源或者双电源条件 下。在低电源、空间节省和低成本应用方面是最有效的解决方案。 这些放大器专门设计为低压工作&#xff08; 2.7V 到 5V &#xff09;…

假冒 Skype 应用程序网络钓鱼分析

参考链接: https://slowmist.medium.com/fake-skype-app-phishing-analysis-35c1dc8bc515 背景 在Web3世界中&#xff0c;涉及假冒应用程序的网络钓鱼事件相当频繁。慢雾安全团队此前曾发表过分析此类网络钓鱼案例的文章。由于Google Play在中国无法访问&#xff0c;许多用户…

2023前端流行的新技术

作为2023年之前的技术水平有限&#xff0c;以下是一些目前为止较为热门的前端开发技术和趋势&#xff0c;这些技术可能在2023年之前进一步发展和普及。 前端程序员可以考虑学习和掌握以下技术&#xff1a; 1.Vue 3和React Hooks&#xff1a;Vue.js和React是目前最受欢迎的JavaS…

软文推广时应该从哪几个角度切入

数字化时代的来临改变了企业推广的方式&#xff0c;软文推广逐渐渗透企业的日常生活中&#xff0c;然而企业想要软文推广行之有效&#xff0c;就需要清晰自己推广的产品和品牌信息&#xff0c;将信息进行明确规划后根据相应的需求进行推广&#xff0c;这也是今天媒介盒子和大家…

Java编程--定时器/线程池/工厂模式/ ThreadPoolExecutor

前言 逆水行舟&#xff0c;不进则退&#xff01;&#xff01;&#xff01; 目录 什么是定时器 实现一个定时器 自己实现一个定时器 什么是线程池 线程池的使用&#xff1a; 什么是工厂模式&#xff1f; 自己实现一个线程池&#xff1a; ThreadPoolExecutor 类…

【设计模式】策略模式

引例 方案一 说明&#xff1a; 不满足OCP&#xff0c;添加新的排序算法或修改某个已有排序算法需要重新编译整个类可复用性差&#xff0c;Sorting类不可被直接复用 方案二 将客户类和算法类分开 说明&#xff1a;Sorting类可复用&#xff0c;但Sorting类仍不满足OCP 方案三…

用户日期格式不一致导致BDC报时间格式不一致问题

问题描述 在做销售开票的功能时用的BDC&#xff0c;业务在测试的时候总是报日期格式不一致的错误&#xff0c;而我自己测的时候却没啥问题&#xff0c;调试的时候发现是我和业务的时间格式不一致&#xff08;我是YYYYMMDD,他是MMDDYYYY&#xff09;。 解决方案 用函数CONVERT…

解析浏览器的事件循环机制:理解JavaScript运行时的执行顺序

解析浏览器的事件循环机制&#xff1a;理解JavaScript运行时的执行顺序 前言定义执行顺序异步任务概念&#xff1a;微任务、宏任务宏任务有哪些&#xff1f;微任务有哪些 实例代码与图解 前言 因为防止在多个用户同时在浏览器中操作一个DOM节点所带来的复杂性&#xff0c;故Ja…

管理压力:打工人不难为打工人

写在前面 让时间回到2018年7月末&#xff1a; 事件地点&#xff1a;中国平安办公室 事件经过&#xff1a; 平安产品经理提出一个需求&#xff0c;要求APP开发人员根据用户手机壳自动调整颜色的主题。这个需求被程序员认为是不合理的。双方开始争论&#xff0c;情绪激动&…

【Transformer从零开始代码实现 pytoch版】(五)总架构类的实现

Transformer总架构 在实现完输入部分、编码器、解码器和输出部分之后&#xff0c;就可以封装各个部件为一个完整的实体类了。 【Transformer从零开始代码实现 pytoch版】&#xff08;一&#xff09;输入部件&#xff1a;embeddingpositionalEncoding 【Transformer从零开始代…

IP-guard WebServer 命令执行漏洞复现

简介 IP-guard是一款终端安全管理软件&#xff0c;旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。在旧版本申请审批的文件预览功能用到了一个开源的插件 flexpaper&#xff0c;使用的这个插件版本存在远程命令执行漏洞&#xff0c;攻击者可利用该漏…

动作捕捉系统通过VRPN与ROS系统通信

NOKOV度量动作捕捉系统支持通过VRPN与机器人操作系统ROS通信&#xff0c;进行动作捕捉数据的传输。 一、加载数据 打开形影动捕软件&#xff0c;加载一段后处理数据。 这里选择一段小车飞机的同步数据。在这段数据里面&#xff0c;场景下包含两个刚体&#xff0c;分别是小车和…