RocketMQ 学习
消息队列
参考官方文档:https://rocketmq.apache.org/zh/docs/
基本概念
- 主题(Topic):是消息传输和消息存储的顶级容器,不是实际的消息容器,而是一个逻辑上的概念,用于区分不同业务消息的标识,内部包含:消息队列(MessageQueue)、消息(Message)。
- 消息类型(MessageType):按照消息的传输特性的不同而定义的不同类型,用于类型管理和权限校验,包含了:普通消息(Normal)、顺序消息(FIFO)、事务消息(Transaction)和定时/延时消息(Delay)。
- 消息队列(MessageQueue):是消息传输和消息存储的实际容器,是消息存储的最小存储单元;一个主题由多个队列组成;由于队列的先进先出特性,可以通过Offset来标记消息在队列中的位置以及确定消息之间的顺序;还可通过Offset去读取任意数量的消息,以实现聚合读取、回溯读取的特性。
- 消息(Message):最小的数据传输单元,生产者将业务数据的负载和扩展属性包装到消息中发送到服务端进行存储,然后按照相关语义和订阅关系投递到消费者进行消费;特性:不可变性,持久性。
- 消息视图(MessageView):就是面向开发的一个消息只读接口,可以查看不能修改。
- 消息标签(MessageTag):是基于主题在进行细分的一个标签,就是给同一主题的消息打上不同的标签,然后消费者如果订阅了一个主题,然后它会根据它想要的标签进行筛选,以此来实现细粒度过滤。
- 消息位点(MessageQueueOffset):可以理解为每一个消息对于队头位置的偏移量,那么每一个消息都可以确定一个Offset,作用:可以通过记录消费的Offset来确保不会重复消费消息,而且可以通过改变消费Offset的来重新消费某个消息。
- 消费位点(ConsumerOffset):即消费者消费的位置,一定是满足 MinOffset <= ConsumerOffset <= MaxOffset,如果超出这个范围,则服务端会强制将 ConsumerOffset 定位到合法的 Offset。
- 消息索引(MessageKey):相当于数组下标的索引,可以通过O(1)的时间访问到索引对应的消息。
- 生产者(Producer):即消息的生产者,作用是构建并传输消息到服务器的实体,按照要求将业务消息数据封装并发送给服务器,就是纯纯给服务器干活的;那干活也有自己的方式:通过API接口去传递信息,同样可以进行批量传输的设置,还有就是发送事务消息,这时候生产者就不能够发完之后撒手不管了,这之间有一个半事务消息的概念,此时不算发送完成,生产者要去执行本地事务消息,再向服务器进行二次事务确认,这时候生产者心想:发送个消息这么麻烦,但是看到自己生产的消息能够到达相应的位置不至于仍在半路没人处理强啊,还是会很欣慰的!
- 事务检查器(TransactionChecker):生产者用于执行本地事务检查和异常事务恢复的监听器;就是刚才说的生产者发送消息后不能不管不问,需要通过事务检查器来监听自己生产的消息是否被正确应用了;流程:生成一条半事务消息 ==> 执行本地事务 ==> 提交事务状态 ==> if(Broker未收到事务状态) ==> 生产者进行回查 ==> 回查相应 ==> Broker 根据返回状态处理消息。
- 事务状态(TransactionResolution):包含事务提交、事务回滚、事务未决,服务端通过判断事务状态来控制事务消息是否应该提交。
- 消费者分组(ConsumerGroup):类似于主题(Topic),是一个逻辑概念,每一个分组通过在服务端注册的订阅关系规则获得Topic,Topic 与 消费者分组 是多对多关系;同时能够设置投递消息的顺序;能够设置消息重试策略。
- 消费者(Consumer):类似于队列(MessageQueue),是接受并消费信息的实体,必须关联到一个消费者组,同一个分组的消费者的行为约束要相同。
- 订阅关系(Subscription):就是针对接受到的消息消费者该怎么处理,取舍哪些的一个规则,同时也利用了消息过滤,并维护了消费状态。
- 消息过滤:就是根据订阅上面介绍的消息标签来进行过滤筛选,这个工作由服务端来完成。
- 重置消费位点:就是重新设置消费者要从哪里开始进行信息的消费。
- 消息轨迹:一条消息从生产者到消费者走过的路记录下来,方便排查错误信息。
- 消息堆积:供多需少,生产的速度大于消费的速度,那些没有来得及消费的信息便堆积在了一起。
- 事务消息:高级消息类型,保证消息生产和本地事务保持一致性。
- 定时/延时消息:高级消息类型,相当于设置定时任务,到达指定时间之后才能够被消费者消费。
- 顺序消息:按照业务中发送消息的顺序去消费,实现业务中的顺序处理;就比如抢票,前面提交消息的人一定比后面提供消息的人先得到票。
以上是对RocketMQ中的基本概念的理解,相信了解了这些之后,再去理解其中的业务逻辑会更加得心应手,以上这些概念就类似于零部件,然后记下来就是如何将零件组装起来造出来一个产品,会持续更新~
相关文章:
RocketMQ 学习
消息队列 参考官方文档:https://rocketmq.apache.org/zh/docs/ 基本概念 主题(Topic):是消息传输和消息存储的顶级容器,不是实际的消息容器,而是一个逻辑上的概念,用于区分不同业务消息的标识&…...
【前端】html2pdf实现用前端下载pdf
npm安装完后,编写代码。 <template><div id"pdf-content">需要被捕获为pdf的内容</div> </template><script> import html2pdf from html2pdf.js;export default {methods: {downloadPdf() {const element document.getE…...

Redis部署架构详解:原理、场景与最佳实践
Redis部署架构详解:原理、场景与最佳实践 Redis作为一种高性能的内存数据库,在现代应用架构中扮演着至关重要的角色。随着业务规模的扩大和系统复杂度的提升,选择合适的Redis部署架构变得尤为重要。本文将详细介绍Redis的各种部署架构模式&a…...
前端开发知识体系全景指南
文章目录 前言前端开发者知识体系清单一、JavaScript基础变量和类型原型和原型链作用域和闭包执行机制语法和API 二、HTML和CSSHTMLCSS手写 三、计算机基础编译原理网络协议设计模式 四、数据结构和算法JavaScript编码能力手动实现前端轮子数据结构算法 五、运行环境浏览器API浏…...

C++哈希表:unordered系列容器详解
本节目标 1.unordered系列关联式容器 2.底层结构 3.模拟实现 4.哈希的应用 5.海量数据处理面试题 unordered系列关联式容器 在c98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可以达到logN,即最差的情况下需要比较红…...
vue-13(延迟加载路由)
用于性能优化的延迟加载路由 延迟加载路由是优化 Vue.js 应用程序性能的关键技术,尤其是那些具有大量路由的应用程序。通过仅在实际需要时加载路由组件,您可以显著减少应用程序的初始加载时间,从而获得更好的用户体验。这对于网络连接速度较…...
pom.xml 文件中配置你项目中的外部 jar 包打包方式
使用 system 作用域(不推荐,但简单直接) <dependency><groupId>com.test</groupId> <!-- 可自定义,建议与项目相关 --><artifactId>open-sdk</artifactId> <!-- 可自定义,建议…...

WordPress通过简码插入bilibili视频
发布于:Eucalyptus-Blog 一、前言 B站是国内非常受欢迎的视频分享平台,上面不仅内容丰富,而且很多视频制作精良、趣味十足。很多人,比如我,就喜欢将B站的视频通过 iframe 嵌入到自己的网页中,但这段代码又…...

ZLG ZCANPro,ECU刷新,bug分享
文章目录 摘要 📋问题的起因bug分享 ✨思考&反思 🤔摘要 📋 ZCANPro想必大家都不陌生,买ZLG的CAN卡,必须要用的上位机软件。在汽车行业中,有ECU软件升级的需求,通常都通过UDS协议实现程序的更新,满足UDS升级的上位机要么自己开发,要么用CANoe或者VFlash,最近…...

黑马k8s(十七)
一:高级存储 1.高级存储-pv和pvc介绍 2.高级存储-pv 3.高级存储-pvc 最后一个改成5gi pvc3是没有来绑定成功的 pv3没有绑定 删除pod、和pvc,观察状态: 4.高级存储-pc和pvc的生命周期 二:配置存储 1.配置存储-ConfigMap 2.配…...

掌握HttpClient技术:从基础到实战(Apache)
目录 前言 一、Apache HttpClient简介 二、HttpClient基础使用 1. 添加依赖 2. 创建HttpClient实例 3. 发送GET请求 4. 发送POST请求 三、HttpClient高级配置与实战案例 1. 连接池优化 2. 超时与重试配置 3. 文件上传(Multipart) 总结 前言 …...
KEYSIGHT N9320B是德科技N9320B频谱分析仪
KEYSIGHT N9320B是德科技N9320B频谱分析仪 附加功能: 频率范围:9 kHz 至 3 GHz 分辨率带宽:10 Hz 至 1 MHz DANL:-130 dBm,-148 dBm,带可选前置放大器 整体幅度精度:<1.5 dB 最小非零扫…...
EXSI通过笔记本wifi上外网配置
我有一台服务器安装了EXSI,服务器IP地址配置的是192.168.137.2,在EXSI中创建了一个linux虚拟机,ip地址是192.168.137.22。现在我有一个windows笔记本,使用家庭的wife上外网,wife给自动分配了一个192.168.0.106地址&…...
Java异常处理的全面指南
Java异常处理的全面指南 一、Java异常的基础概念1.1 什么是异常1.2 异常类的层次结构 二、Java异常的处理方式2.1 try-catch块2.2 throws关键字2.3 throw关键字 三、自定义异常3.1 自定义受检异常3.2 自定义非受检异常 四、Java异常处理的最佳实践4.1 捕获合适粒度的异常4.2 避…...

sql知识梳理(超全,超详细,自用)
目录 通识 查询的基本语法 数据库(database)操作 表(table)的操作 表中列的操作 索引操作 表中行的操作 insert into语句 update语句 删除语句 select语句 表与表之间的关系 连接查询 子查询 视图 数据备份与还原 …...

[ Qt ] | QPushButton常见用法
目录 绑定键盘快捷键 前面已经说了很多用法了,下面主要说说绑定键盘,设置Icon图片。 绑定键盘快捷键 实现四个按钮,可以使用wsad来控制另一个按钮的上下左右的移动。 #include "widget.h" #include "ui_widget.h"Wid…...
WEB3——为什么做NFT铸造平台?
相必之前看过我的入门项目推荐关于简易NFT铸造平台的文章。会有一些疑惑 WEB3—— 简易NFT铸造平台(ERC-721)-入门项目推荐-CSDN博客 WEB3,我直接在https://nft.storage网站里上传图片不行吗,必须用合约铸造NFT? 我做…...

电脑驱动程序更新工具, 3DP Chip 中文绿色版,一键更新驱动!
介绍 3DP Chip 是一款免费的驱动程序更新工具,可以帮助用户快速、方便地识别和更新计算机硬件驱动程序。 驱动程序更新工具下载 https://pan.quark.cn/s/98895d47f57c 软件截图 软件特点 简单易用:用户界面简洁明了,操作方便,…...

【机器学习基础】机器学习入门核心:数学基础与Python科学计算库
机器学习入门核心:数学基础与Python科学计算库 一、核心数学基础回顾1. 函数与导数2. Taylor公式3. 概率论基础4. 统计量5. 重要定理6. 最大似然估计(MLE)7. 线性代数 二、Python科学计算库精要1. NumPy:数值计算核心2. SciPy&…...

上交具身机器人的视觉运动导航!HTSCN:融合空间记忆与语义推理认知的导航策略
作者:Qiming Liu 1 ^{1} 1, Guangzhan Wang 2 ^{2} 2, Zhe Liu 3 , 4 ^{3,4} 3,4 and Hesheng Wang 1 , 3 , 5 , 6 ^{1,3,5,6} 1,3,5,6单位: 1 ^{1} 1上海交通大学自动化系, 2 ^{2} 2上海交通大学软件学院, 3 ^{3} 3上海交通大学教…...

【C++并发编程01】初识C++并发编程
1、并发是什么 并发是指两个或更多独立的活动同时发生,现实生活中常见的并发场景如边吃饭边看手机。 1.1、计算机中的并发: 计算机领域的并发是指在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。 我们在电脑上能够边听音乐边和…...

Mysql库的操作和表的操作
Mysql库和表的操作 库的操作1.查看数据库列表2.创建数据库3.使用数据库4.查看当前在那个数据库中5.显示数据库的创建语句6.修改数据库7.删除数据库8.备份和恢复数据库9.查看数据的连接情况(简单来说就是查看有多少人使用你的数据库) 表的操作1.创建表2.查看表结构3.修改表本身(…...

LangChain-结合GLM+SQL+函数调用实现数据库查询(三)
针对 LangChain-结合GLM+SQL+函数调用实现数据库查询(二)-CSDN博客 进一步简化 通过 LangChain 和大语言模型(GLM-4)实现了一个 AI 代理,能够根据自然语言提问自动生成 SQL 查询语句,并连接 MySQL 数据库执行查询,最终返回结果。 整个流程如下: 用户提问 → AI 生成 SQ…...
word文档格式规范(论文格式规范、word格式、论文格式、文章格式、格式prompt)
文章目录 prompt prompt [格式要求] - 字体:中文宋体小四;英文Times New Roman 12pt;标题黑体 - 行距:1.5倍(段前段后0行) - 边距:A4默认(上下2.54cm,左右3.17cm&…...
Ubuntu 桌面版忘记账户密码的重置方法
如果你忘记了 Ubuntu 桌面版的用户密码,可以通过进入恢复模式(Recovery Mode)来重置密码。以下是详细步骤: 一、进入 GRUB 引导菜单 重启计算机:点击关机按钮,选择重启。在启动时按住 Shift 键࿱…...

抖音商城抓包 分析
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 抓包展示 总结 1.出于安全考虑,本章未…...
[SC]sc_signal_rv的用法和sc_signal相比有什么优势?
sc_signal_rv的用法和sc_signal相比有什么优势? 在 SystemC 中,sc_signal<T> 是最常用的单驱动(single‐driver)信号通道;而 sc_signal_rv<W>(“rv” = resolved vector)则是一种多驱动、带总线(tri-state)分辨功能的信号。下面分几点来说明它们的…...
掌握 FreeRTOS:打造高效嵌入式系统的第一步
实例对比说明: 手机: 点击相机 -> 操作系统 -> 打开摄像头 无操作系统: 相机 -> 打开摄像头也能实现,但方式死板、不支持第三方应用 MCU 对比说明: 裸机开发: MCU -> 直接控制硬件 使用操作系统: MCU -> 操作系统 -> 硬…...

性能优化 - 案例篇:数据一致性
文章目录 Pre引言1. 分布式缓存概念2. Redis 与 Memcached 区别概览3. Spring Boot 中使用 Redis3.1 引入依赖与常用客户端3.2 RedisTemplate 的基本用法3.3 Spring Cache 注解式缓存 4. 秒杀业务简介及挑战5. Lua 脚本实现原子库存扣减5.1 准备阶段:数据预加载5.2 …...

Spring框架学习day6--事务管理
Spring事务管理 Spring事务管理是在AOP的基础上,当我们的方法完全执行成功后,再提交事务,如果方法中有异常,就不提交事务 Spring中的事务管理有两种方式: 1.编程式事务 需要我们在业务代码中手动提交 2.声明式…...