【RocketMQ】一、基本概念

文章目录

  • 1、举例
  • 2、MQ异步通信
  • 3、背景
  • 4、Rocket MQ 角色概述
    • 4.1 主题
    • 4.2 队列
    • 4.3 消息
    • 4.4 生产者
    • 4.5 消费者分组
    • 4.6 消费者
    • 4.7 订阅关系
  • 5、消息传输模型
    • 5.1 点对点模型
    • 5.2 发布订阅模型

1、举例

以坐火车类比MQ:
在这里插入图片描述
安检大厅就像是一个系统的门面,接受来自四面八方且目的地不同的人流,并完成基础的安全校验。人来了,不是直接涌上火车,而是根据所乘坐的车次,到不同的候车厅等着,火车则是消费这些人,现实中是把他们拉到对应的地方,这个候车厅,就像MQ,而不同的车次走向不同的候车厅,则是“主题”这个概念的味道。

2、MQ异步通信

同步通信下,每个请求直接从调用方发送到被调用方,且要求被调用方立即返回响应结果给调用方,以便确定本次调用是否成功。

在这里插入图片描述

异步通信下,调用方只需将请求转换成异步时间(消息)发送给中间代理,发送成功,即可为该异步链路调用完成。剩下的工作会有中间代理可靠地通知到下游的被调用系统,以确保任务执行完成。这个中间代理,一般就是消息中间件。

在这里插入图片描述

3、背景

Rocket MQ是阿里专为万亿级超大规模的消息处理而设计,具有高吞吐、低延迟、海量堆积、顺序收发等特点,项目发展:

  • 2012年阿里开发Rocket MQ
  • 2015年重大特性发布:事务消息、SQL过滤、轨迹追踪、定时消息
  • 2016年在阿里云托管,并捐赠给Apache
  • 2017年成为Apache的顶级项目
// apache的官网apache.org前,加上技术,如rocketmq
https://rocketmq.apache.org

4、Rocket MQ 角色概述

消息生产者生产出消息,投递到对应的topic主题下的队列里面(一个topic下,有多个Message Queue),消费者组通过订阅主题,从RocketMQ 服务端中获取消息并消费。

在这里插入图片描述

4.1 主题

  • 一个主题下有多个队列
  • 消息类型必须一致:创建主题时,消息类型为顺序消息,却又发送事务消息到该主题,就会返回类型不匹配的异常
  • 每种主题只支持一种消息类型
  • 主题的拆分,可以根据业务和消息类型这两方面来考虑

4.2 队列

  • 主题是一个逻辑概念,队列才是真正存储消息的
  • 所有成功发送到队列的消息,默认做持久化
  • 生产者指定某个主题,向主题内发送消息,但实际消息发送到该主题下的某个队列中
  • 同一队列间的消息天然存在顺序关系,头部最早,尾部最新
  • 消息在队列中的位置和消息之间的顺序通过位点(Offset) 进行标记管理
  • 可以从任意位点读取任意数量的消息,以此实现类似聚合读取、回溯读取

4.3 消息

  • 默认对消息做持久化
  • 消息对象的属性有两类,生产者自己定义的 + Rocket MQ服务端自己生成并填充的
  • 生产者自己定义的属性有:所要投递到的主题名称、消息类型、消息负载body、索引Key列表、过滤标签tag、定时时间等
  • Rocket MQ服务端自己生成并填充的属性有:实际存储当前消息的队列、消息位点offset、消息ID、消息重试次数

在这里插入图片描述

4.4 生产者

在这里插入图片描述

  • 同一个生产者可以向多个主题发送消息,并不需要创建多个生产者,同一个主题也可以接收多个生产者的消息
  • 生产者发送消息可以选择同步或者异步
  • 生产者可以选择批量发送消息
  • 不要频繁创建和销毁生产者(RocketMQ 的生产者是可以重复利用的底层资源,类似数据库的连接池)
  • 失败重试和事务控制见后续
// 正确
Producer p = ProducerBuilder.build();
for (int i =0;i<n;i++){Message m= MessageBuilder.build();p.send(m);}
p.shutdown();// 错误
for (int i =0;i<n;i++){Producer p = ProducerBuilder.build();Message m= MessageBuilder.build();p.send(m);p.shutdown();
}

4.5 消费者分组

  • 一组消费逻辑一致的消费者
  • 通过消费者分组内初始化多个消费者实现消费性能的水平扩展
  • Apache RocketMQ 以消费者分组的粒度来管理订阅关系
  • Apache RocketMQ 的服务端将消息投递给消费者消费时,支持顺序投递和并发投递,也是在消费者组中定义
  • 消费者消费消息失败时的重试策略,包括重试次数、死信队列设置等,也是在消费者分组中定义

4.6 消费者

  • 消费者必须关联一个指定的消费者分组,以获取分组内统一定义的行为配置和消费状态

  • 消费者类型有:PushConsumer类型、SimpleConsumer类型、PullConsumer类型(仅推荐流处理场景使用)

  • RocketMQ 的消费者是可以重复利用的底层资源,类似数据库的连接池,所以不要频繁创建和销毁消费者

// 正确
Consumer c = ConsumerBuilder.build();
for (int i =0;i<n;i++){Message m= c.receive();//process message}
c.shutdown();// 错误
for (int i =0;i<n;i++){Consumer c = ConsumerBuilder.build();Message m= c.receive();//process messagec.shutdown();
}

4.7 订阅关系

  • 订阅关系是针对消费者分组和主题来说的,不是单独的一个消费者
  • 如下,两个消费者分组都订阅了主题A,且两个分组要求的数据不同,一个要带Tag a,一个要带Tag b

在这里插入图片描述

  • 如下,同一个消费者组,也可以订阅两个不同的主题

在这里插入图片描述

5、消息传输模型

5.1 点对点模型

  • 消费者和生产者之间,只认同一个队列
  • 即使消费者有多个,一条消息也只能被唯一一个消费者实例处理
    在这里插入图片描述

5.2 发布订阅模型

  • 同一个主题内的消息,可以被多个订阅组消费
  • 每个订阅组都可以拿到全量消息
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

整合多方大佬博客以及视频 一文读懂 servlet

参考文章以及视频 文章&#xff1a; 都2023年了&#xff0c;Servlet还有必要学习吗&#xff1f;一文带你快速了解Servlet_servlet用得多吗-CSDN博客 【计算机网络】HTTP 协议详解_3.简述浏览器请求一个网址的过程中用到的网络协议,以及协议的用途(写关键点即可)-CSDN博客 【…

大数据可视化-三元图

三元图是一种用于表示三种变量之间关系的可视化工具&#xff0c;常用于化学、材料科学和地质学等领域。它的特点是将三个变量的比例关系在一个等边三角形中展示&#xff0c;使得每个点的位置代表三个变量的相对比例。 1. 结构 三个角分别表示三个变量的最大值&#xff08;通常…

TikTok流量不佳:是网络环境选择不当还是其他原因?

TikTok&#xff0c;作为全球短视频社交平台的佼佼者&#xff0c;每天都有海量的内容被上传和分享。然而&#xff0c;很多用户和内容创作者发现&#xff0c;他们的TikTok视频流量并不理想。这引发了一个问题&#xff1a;TikTok流量不佳&#xff0c;是因为网络环境选择不当&#…

Lumos学习王佩丰Excel第十五讲:条件格式与公式

一、使用简单的条件格式 1、为特定范围的数值标记特殊颜色 条件格式-需选择设定范围&#xff08;大于/小于/介于/......&#xff09;&#xff1a; 数值会动态根据条件判断更新颜色&#xff1a; 模糊匹配&#xff0b;条件格式&#xff1a;选择包含部分文本的特殊值 2、查找重复…

【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9)

&#x1f3d8;️个人主页&#xff1a; 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9&#xff09; 实验一 Lab: Reflected XSS into HTML context with nothing…

国自然基金项目撰写技巧、技术路线与ChatGPT融合应用

随着社会经济发展和科技进步&#xff0c;基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题&#xff0c;具备突破性的科学思路和方法。因此&#xff0c;基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合&#xff0c;形成多学科交叉…

一款批量下载 B 站动态页图片的脚本

在逛 B 站的时候&#xff0c;总能看到不少 UP 会发很多图片&#xff0c;此时一个一个保存非常麻烦&#xff0c;而且文件名都是随机的字符串&#xff0c;还得手工重命名。 为此&#xff0c;特地搜索了下有没相关的浏览器插件或油猴脚本&#xff0c;还真给我找到一个。 脚本地址…

图解 TCP 四次挥手|深度解析|为什么是四次|为什么要等2MSL

写在前面 今天我们来图解一下TCP的四次挥手、深度解析为什么是四次&#xff1f; 上一片文章我们已经介绍了TCP的三次握手 解析四次挥手 数据传输完毕之后&#xff0c;通信的双方都可释放连接。现在客户端A和服务端B都处于ESTABLISHED状态。 第一次挥手 客户端A的应用进…

计算机网络-小型综合网络的搭建涉及到无线路由交换安全

目录 1 拓扑架构 2 做项目的思路 3 做配置 3.1先做核心交换 3.2 防火墙的配置 4 ac 和ap 的配置 4.1 ac上配置安全的东西 5.1 测试​编辑 1 拓扑架构 要求看上面的图 2 做项目的思路 这张网很明显是一个小综合&#xff0c;设计到我们的无线交换&#xff0c;路由…

MISC - 第二天(wireshark,base64解密图片,zip文件伪加密,LSB二进制最低位,ARCHPR工具)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解杂项 乌镇峰会种图 使用了stegsolve工具&#xff0c;查看更多信息 发现flag信息 更改为html后缀flag{97314e7864a8f62627b26f3f998c37f1} wireshark 看题目是 分析pacp数据包&#xff0c;通过网站登录…

HarmonyOS应用开发(组件库)--组件模块化开发、工具包、设计模式(持续更新)

致力于&#xff0c;UI开发拿来即用&#xff0c;提高开发效率 正则表达式...手机号校验...邮箱校验 文件判断文件是否存在 网络下载下载图片从沙箱中图片转为Base64格式从资源文件中读取图片转Base64 组件输入框...矩形输入框...输入框堆叠效果&#xff08;用于登录使用&#xf…

基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真&#xff0c;对比网络通信开销&#xff0c;存活节点数量&#xff0c;网络能耗以及数据通信量四个指标…

C语言的文件函数

此篇文章主要对C语言中的" 文件读写函数 "进行详细的刨析~通过此篇文章能够了解并学习到&#xff1a;" 字符读写函数 "&#xff0c;" 文本行读写函数 "&#xff0c;" 格式化读写函数 "&#xff0c;" 二进制读写函数 "&#…

深度学习与应用:人体关键点检测

实验二 深度学习与应用&#xff1a;人体关键点检测 1、 实验目的 了解人体关键点检测基础流程熟悉YOLOV7-pose模型结构掌握 YOLOv7-pose 模型的训练、Fine-tuning 以及推理的能力掌握YOLOV7-pose模型对实际问题的应用能力&#xff0c;了解如何在特定的场景和任务中应用该模型…

【机器学习】——线性回归(自我监督学习)

文章目录 1. 线性回归的定义2. 线性回归的模型3. 线性回归的核心思想4. 线性回归的求解5. 线性回归的假设6. 模型评估7. 线性回归的优缺点8. 线性回归的扩展9. 线性回归的实际应用10. 示例代码&#xff08;Python实现&#xff09; 线性回归详细介绍 1. 线性回归的定义 线性回归…

53 语言模型(和之后用来训练语言模型的数据集)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录理论部分使用计数来建模N元语法总结 代码读取长序列数据随机采样顺序分区 小结练习 理论部分 在上一部分中&#xff0c;我们了解了如何将文本数据映射为词元&#xff0c;以及将这些词元可以视为一系列离散的观测&#xff0c;例如单词或字符…

.bixi勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

导言 在当今数字化时代&#xff0c;勒索软件已成为企业和个人面临的重大安全威胁。.bixi勒索病毒作为其中一种新型恶意软件&#xff0c;以其快速加密文件的能力和高效传播机制引发了广泛关注。该病毒不仅能够迅速锁定用户的关键数据&#xff0c;还常常在感染后施加极大的心理压…

邀请功能的实现分析

邀请功能 功能分析 场景&#xff1a;项目中出现用户邀请其他用户加入群组的功能 需求&#xff1a;用户点击生成邀请链接可以生成一个url&#xff0c;将这个url分享给其他用户&#xff0c;其他用户点击后对用户登录状态进行校验&#xff0c;校验通过即可加入群组&#xff0c;未…

江协科技STM32学习- P16 实验-TIM输出比较(PWD驱动LED呼吸灯,舵机,直流电机)

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

如何访问字符串中某个字符

在Java中&#xff0c;你可以使用字符串的charAt(int index)方法来查看字符串中第index个位置的字符。index是从0开始的&#xff0c;也就是说&#xff0c;字符串的第一个字符的索引是0&#xff0c;第二个字符的索引是1&#xff0c;以此类推。如果索引超出了字符串的长度&#xf…