RocketMq 主题(TOPIC)生产级应用

news2025/4/17 13:55:49

RocketMq是阿里出品(基于MetaQ)的开源中间件,已捐赠给Apache基金会并成为Apache的顶级项目。基于java语言实现,十万级数据吞吐量,ms级处理速度,分布式架构,功能强大,扩展性强。

官方文档

Linux 安装 RocketMq-CSDN博客

Springboot 集成 RocketMq(入门)-CSDN博客

1.定义

主题是 RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。 主题的作用主要如下:

1.1 定义数据的分类隔离

RocketMQ 建议将不同业务类型的数据拆分到不同的主题中管理,通过主题实现存储的隔离性和订阅隔离性。

1.2 定义数据的身份和权限

RocketMQ 的消息本身是匿名无身份的,同一分类的消息使用相同的主题来做身份识别和权限关理。

2.模型关系

主题是 RocketMQ 的顶层存储,所有消息资源的定义都在主题内部完成,但主题是一个逻辑概念,并不是实际的消息容器。

主题内部由多个队列组成,消息的存储和水平扩展能力最终是由队列实现的;并且针对主题的所有约束和属性设置,最终也是通过主题内部的队列来实现。

3.内部属性

3.1 主题名称

定义:主题的名称,用于标识主题,主题名称集群内全局唯一。


3.2 队列列表

定义:队列作为主题的组成单元,是消息存储的实际容器,一个主题内包含一个或多个队列,消息实际存储在主题的各队列内。

写队列:发送消息时根据写队列数量返回路由信息。

读队列:消费时按照读队列的个数返回路由信息。

3.3 消息类型

定义:主题所支持的消息类型。

Normal:普通消息。
FIFO:顺序消息。
Delay:定时/延时消息。
Transaction:事务消息.

约束:RocketMQ 从5.0版本开始,支持强制校验消息类型,即每个主题只允许发送一种消息类型的消息,这样可以更好的运维和管理生产系统,避免混乱。为保证向下兼容4.x版本行为,强制校验功能默认关闭,推荐通过服务端参数 enableTopicMessageTypeCheck 开启校验。

4.主题的类型

普通主题:这里的topic是用户创建主题。

重试主题:这里的topic是消息发送失败时候系统为之创建的主题。

死信主题:这里的topic类似垃圾箱,无法从中生产或者消费消息。

系统主题:这里的topic是Brocker启动后就自动生成的主题。

5.生产中使用建议

5.1 关闭自动创建主题的功能

主题属于顶层资源和容器,拥有独立的权限管理、可观测性指标采集和监控等能力,创建和管理主题会占用一定的系统资源。因此,生产环境需要严格管理主题资源,请勿随意进行增、删、改、查操作。

5.2 手动控制台创建

5.2.1 队列

当读队列数量 >= 写队列数量业务可以正常进行。

当读队列数量 写队列数量效果最佳

如果想调整读写队列的数量,首先减少写队列数量再减少读队列的数量(确保已读完)。

假设创建了4个写队列2个读队列则有两个队列的消息无法被消费,反之则存在两个空闲的读队列。

RocketMq不直接将读写队列设置相同直接目的是为了安全的收缩队列数量,间接的为了安全的扩容。

5.2.2 perm

6:读写状态,当前队列允许读取消息和写入消息。

4:只读状态,当前队列只允许读取消息,不允许写入消息。

2:只写状态,当前队列只允许写入消息,不允许读取消息。

0:不可读写状态,当前队列不允许读取消息和写入消息。

5.3 单一主题只收发一种类型消息

主题的设计原则为通过主题隔离业务,不同业务逻辑的消息建议使用不同的主题。同一业务逻辑消息的类型都相同,因此,对于指定主题,应该只收发同一种类型的消息。

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

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

相关文章

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录,如有错误,请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条,无论你拖拽滚动条,选中滚动条之后按键盘…

学生信息管理系统程序Python

系统主界面 在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时,有两种方法, 一种是输入1,另一种是按下键盘上的↑或↓方向键进行选择。这两种方法的结果是一样的,所以使用哪种方法都可以。 (…

【Docker】安装MySQL 通俗易懂 亲测没有任何问题

目录 1.拉取镜像 2.运行容器 3.创建mysql配置文件 4.测试 1.拉取镜像 dockerhub官网:Docker 如果需要其他版本mysql docker pull mysql:xxx(版本) docker pull mysql #默认拉取最新版本 latest 2.运行容器 docker run -d -p 3306:33…

《大江大河2》最触动我的两段经典对话

第一部分 默默的关注了《大江大河》,第2部依旧保持了和第1部的水准,难得看到这么良心的电视剧。 相比于原剧本来说,我更喜欢改编后的内容,剧情更加凝重,深刻,关键是真实。 宋运辉开始是不认识路司长的&…

前端web开发学习笔记

JavaWeb 前端Web开发HTMLCSSjavaScript1.JS引入2.JS基础语法3.JS函数4.JS对象 BOMDOM文档对象模型JS事件监听VueVue常用指令Vue的生命周期 AjaxAxios 前端工程化环境准备NodeJS安装和Vue-cli安装vue项目Vue组件库Element组件的使用 Vue路由Nginx打包部署 前端Web开发 HTML 负…

4、浏览器插件配置使用

文章目录 一、Hackbar1. Load和Execute功能的使用2. Split功能的使用3. Post功能的使用4. 编码功能的使用 二、FoxyProxy1、设置Burpsuite的代理服务端口2、FoxyProxy插件的简单使用 三、User-Agent Switcher 一、Hackbar 火狐浏览器中按下F12键启用hackbar。 1. Load和Execut…

bit_set位图|布隆过滤器

位图 对于海量整形数据的处理,通常是上百个G的代码。 通常有如下的应用: 1. 快速查找某个数据是否在一个集合中 2. 排序 去重 3. 求两个集合的交集、并集等 4. 操作系统中磁盘块标记 如果将数据加载到内存中,运用基本数据结构处理&…

foobar2000 突然无法正常输出DSD信号

之前一直在用foobar2000加外置dac听音乐,有一天突然发现听dsd的时候,dac面板显示输出的是PCM格式信号,而不是DSD信号,这让我觉得很奇怪,反复折腾了几次,卸载安装驱动什么的,依然如此&#xff0c…

Kubernetes技术与架构-配置

一般情况下,Kubernetes使用yaml文件格式定义配置文件,配置文件须指定对应的API稳定版本号,将配置文件进行版本控制、在发布新版本的过程中出问题时可以执行版本回滚操作,将相关联的对象定义在同一个配置文件中、从而更容易地管理&…

springboot宠物店管理系统-计算机毕设 附源码 32041

SpringBoot宠物店管理系统 摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,宠物行业当然也不例外。宠物店管理系统是以实际运用为开发背景,运用软件工程原理…

Failed to initialize NVML: Driver/library version mismatch

做一个项目的时候,发现vscode一开始训练就报如下错误 RuntimeError: CUDA out of memory. Tried to allocate 916.00 MiB (GPU 0; 6.00 GiB total capacity; 4.47 GiB already allocated; 186.44 MiB free; 4.47 GiB reserved in total by PyTorch) 正常来说这是…

2023-3年CSDN创作纪念日

机缘 今天开开心心出门去上班,就收到了一个csdn私信,打开一看说是给我惊喜来着,我心想csdn还能给惊喜?以为是有什么奖品或者周边之类的,结果什么也没有,打开就是一份信😂。 也挺不错的&#xf…

【理解ARM架构】 散列文件 | 重定位

🐱作者:一只大喵咪1201 🐱专栏:《理解ARM架构》 🔥格言:你只管努力,剩下的交给时间! 目录 🏓引出重定位🏓散列文件🏓可读可写数据段重定位&#…

Kibana部署

服务器 安装软件主机名IP地址系统版本配置KibanaElk10.3.145.14centos7.5.18042核4G软件版本:nginx-1.14.2、kibana-7.13.2-linux-x86_64.tar.gz 1. 安装配置Kibana (1)安装 [rootelk ~]# tar zxf kibana-7.13.2-linux-x86_64.tar.gz -C…

leetcode算法之链表

目录 1.两数相加2.两两交换链表中的节点3.重排链表4.合并K个升序链表5.K个一组翻转链表 1.两数相加 两数相加 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(…

针对c语言的scanf读取字符和字符串解析

在scanf函数中,格式字符串里的空格字符有特定的作用。 当你在格式字符串里放置一个空格时,scanf会尝试匹配并消耗输入中的一个或多个空白字符(包括空格、制表符或换行符)。换句话说,它会跳过任何空白字符,…

针对哈希冲突的解决方法

了解哈希表和哈希冲突是什么 哈希表:是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。简单来说哈希表(key-value)之间存在一个映射关系,是键值对的关系,一个键对应一个值。 …

蓝桥杯第四场双周赛(1~6)

1、水题 2、模拟题,写个函数即可 #define pb push_back #define x first #define y second #define int long long #define endl \n const LL maxn 4e057; const LL N 5e0510; const LL mod 1e097; const int inf 0x3f3f; const LL llinf 5e18;typedef pair…

java_基础_关键字

1.关键字的字母全部都是小写. 2.常用的代码编辑器(Notepad),针对关键字有特殊的颜色标记,非常的直观.

CleanMyMac X好不好用?有哪些优势

CleanMyMac X2024正是这一愿景和使命的体现。 作为一个团队,我们致力于采用令人过目不忘的设计来打造我们引以为豪的产品。 这是 UX/UI 设计已经成为我们核心价值的原因之一。 这也是我们不断完善它,从而为我们的用户创造最神奇体验的动力。 CleanMyMac …