公司技术栈用到了RocketMQ,我对此块知识进行了回顾(初始RocketMQ)

news2025/2/3 13:10:27

前言

作为24届的校招生,不知道大伙儿们是否都已经到了工作岗位上。为了以后更方便的接触到公司的业务,我司为我们安排了将近一个月的实操。虽然不用敲代码,但是…

在这里插入图片描述

了解到我司使用到的技术栈,在空闲时间正好对RocketMQ这块技术做个回顾,希望能回想起那死去的记忆,同时希望能够帮助到正在学习这块知识的小伙伴儿们!

在这里插入图片描述

以下正文开始。

文章目录

  • 前言
  • RocketMQ简介
  • 总体架构
    • Producer(消息生产者)
    • Consumer(消息消费者)
    • Broker(存储消息和分发服务)
    • NameServer(注册中心)
  • 简单生产消息并进行消费
    • bin目录
    • conf目录
    • NameServer,启动
    • Broker,启动
    • 发送和接收消息
  • 文章小结

RocketMQ简介

和RabbitMQ不一样,RocketMQ是一款由阿里巴巴开发并开源的分布式消息中间件,它是基于纯Java实现的。RocketMQ的前身是MetaQ,后面成为Apache的顶级开源项目。

RocketMQ的设计架构非常简洁,并且功能也很强大。除此之外,作为四大消息中间件之一,RocketMQ它也支持分布式事务、消息过滤、流量控制等高级特性。接下来我们先具体了解一下RocketMQ的各个组件!

总体架构

RocketMQ的整体架构包含四个核心组件:Producer(消息生产者)、Consumer(消息消费者)、Broker(消息存储与分发服务)、NameServer(注册中心)。这些组件协同工作,他们共同实现消息的生产、存储、消费及高可用功能。

在这里插入图片描述

Producer(消息生产者)

Producer是消息发布的角色,它负责将消息发送到指定的Topic

Producer是通过NameServer获取Broker的路由信息,然后根据负载均衡策略选择具体的Broker集群队列进行消息投递。Producer还支持快速失败和低延迟的消息投递过程。

和RabbitMQ的消息生产者一样,Producer支持集群部署。在生产过程中,Producer会将消息发送到Broker的Master节点,Master节点负责将消息存储到CommitLog中,并且异步同步到Slave节点。

Consumer(消息消费者)

Consumer是消息消费的角色,负责从Broker拉取消息并进行处理。

Consumer支持两种消费模式:Push,推模式和Pull,拉模式,这两种消费模式的底层实现都基于Pull模式。Push模式是通过消费监听器自动拉取消息并推送给消费者,而Pull模式则需要消费者主动拉取消息。

Consumer可以配置为集群模式或广播模式。在集群模式下,消息只会被发送到消费者组中的一个消费者;在广播模式下,消息会发送给所有消费者。Consumer的集群部署同样依赖于业务需求。

Broker(存储消息和分发服务)

Broker是RocketMQ的核心模块,负责接收并存储消息,同时提供Push/Pull接口将消息发送给Consumer。

Broker采用主从集群部署,实现多副本存储和高可用。Master节点负责处理消息写入,而对于Slave节点,它是主动从Master节点拉取数据来保持数据一致性的。

Broker存储消息主要依赖于CommitLog、ConsumeQueue和Index这三个文件。CommitLog用于顺序存储消息实体,ConsumeQueue作为CommitLog的索引文件,用于快速定位消息,而Index文件支持按消息属性查找消息。(这个到后面细说!)

NameServer(注册中心)

NameServer是RocketMQ的注册中心,负责服务发现和路由。

它管理集群的Topic-Queue路由配置和Broker的实时配置信息。Producer和Consumer通过与NameServer建立长连接,定期拉取Topic路由信息。

NameServer集群部署,但是各个实例间不会相互通信,每个实例都保存完整的Broker路由信息。所以,单个NameServer节点的故障不会影响整个集群的正常运行。

简单生产消息并进行消费

首先在这之前我们需要下载并将RocketMQ安装到虚拟机中,这里我下载的是4.7.1版本的RocketMQ。在使用RocketMQ之前,我们先看看下载好的RocketMQ中都有什么文件。

切换到下载好的RocketMQ目录,使用ls命令列出文件和文件夹
之后分别切换到bin文件夹和conf配置文件夹,列出所有文件

bin目录

bin目录位于RocketMQ安装目录下的根位置,它包含了RocketMQ的启动脚本和工具脚本。这些脚本用于启动NameServer、Broker等组件,同时还执行一些管理任务,比如查看消息、发送消息等等。

在这里插入图片描述

mqnamesrv:用于启动NameServer服务的脚本。NameServer是RocketMQ的命名服务,用于维护Broker的地址信息和路由信息。(上文有提到)
mqbroker:用于启动Broker服务的脚本。Broker是RocketMQ的核心组件,负责消息的存储、转发等。(同上)
tools.sh:一个工具脚本,用于执行一些快速测试或管理任务,比如发送消息、接收消息等等。

conf目录

conf目录同样位于RocketMQ安装目录下的根位置,它包含了RocketMQ的配置文件。这些配置文件用于定义RocketMQ的运行参数和行为。

在这里插入图片描述

broker.conf:Broker的配置文件,包含Broker的各种运行参数,比如NameServer的地址、Broker的名称、IP地址、端口号、存储路径等等。这个文件是Broker启动时必须指定的配置文件之一。
logback_namesrv.xml 和logback_broker.xml:这两个文件是Logback的配置文件,分别用于配置NameServer和Broker的日志记录行为。它们允许用户自定义日志的级别、格式、输出位置等等。

conf目录下还包含其他的配置文件或目录,这些文件或目录可以用于不同的场景或者配置不同的组件。举个栗子,RocketMQ支持集群部署,所以在conf目录下会有用于配置集群的目录或文件,比如2m-2s-async、2m-2s-sync这些目录,这些目录内包含了用于配置不同集群模式的Broker配置文件。(这点后面细嗦)

NameServer,启动

在启动RocketMQ之前,我们需要修改bin目录下的runserver.sh⽂件。因为RocketMQ默认设置的JVM内存为4G,但是虚拟机⼀般没有4G内存,所以我们需要将大小调整为512mb或者256mb。

切换到bin目录 cd bin
修改runserver.sh文件 vim runserver.sh
找到需要修改的地方作如下修改

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

因为在启动RocketMQ服务之前需要先启动NameServer,所以我们在bin⽬录内使⽤静默⽅式启动。

nohup ./mqnamesrv &  

这里对上诉命令做一个解释:

nohup 命令可以忽略所有的挂断信号,使命令持续运行。它通常与 & 一起使用,以在后台运行命令。而且nohup 命令会输出重定向到一个名为 nohup.out 的文件中,除非你在命令中指定了其他输出文件。
./mqnamesrv:这部分代表要运行的程序或脚本。./mqnamesrv 是RocketMQ NameServer的启动脚本。. 表示当前目录,/ 是路径分隔符,所以 ./mqnamesrv 指的是当前目录下名为 mqnamesrv 的脚本或可执行文件
&:这个符号用于将命令置于后台执行。在命令的末尾添加 &,我们就可以让输入的命令在后台执行,这样我们就可以在同一个终端中继续执行其他命令了。

输入这个命令后,使用jps查看进程可以看到NameServer已经启动了。

在这里插入图片描述

Broker,启动

在启动Broker之前,我们同样需要修改Broker的jvm参数配置,将默认8G内存修改为512m或者256m。修改 bin/runbroker.sh ⽂件。

步骤同上!!!

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

同时,我们可以在 conf目录下的broker.conf ⽂件中加⼊以下配置,开启⾃动创建Topic功能。

autoCreateTopicEnable=true

然后同上,以静默⽅式启动broker:

nohup ./mqbroker -n localhost:9876 &

其中,localhost也可以改为你的具体IP地址。执行命令后:

看到这里,你可能看到了这个输入文件,我们可以查看这个输出文件cat nohup.out,出现下图代表启动成功。

在这里插入图片描述

发送和接收消息

在发送/接收消息之前,我们需要告诉客户端nameserver的位置。配置环境变量NAMESRV_ADDR :

export NAMESRV_ADDR=localhost:9876

上文介绍到了RocketMQ自带的tools.sh工具,这里可以用上了。我们使用bin/tools.sh⼯具验证消息的发送,默认会发1000条消息:

./tools.sh org.apache.rocketmq.example.quickstart.Producer

在这里插入图片描述
然后使用bin/tools.sh⼯具验证消息的接收:

./tools.sh org.apache.rocketmq.example.quickstart.Consumer

在这里插入图片描述
最后关闭服务器(关闭Broker和nameserver)

./mqshutdown broker
./mqshutdown namesrv

文章小结

这篇文章主要介绍Producer、Consumer、Broker和NameServer四个核心组件,和简单的生产者生产消息到消费者对消息进行消费,后续会继续分享关于RocketMQ集群相关的知识点。

本篇文章到这里就结束了,感谢各位小伙伴们的支持!

在这里插入图片描述

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

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

相关文章

Redis集群部署Windows版本

Redis集群 之前因为数据量的原因,并没有进行Redis集群的配置需要,现在由于数据量大,需要进行集群部署。 最初在windows系统部署,需要Redis的windows版本,但官方没有windows版本,所以需要去gitHub上找由民…

git使用-命令行+VS Code结合使用

一、Git常用命令 // 显示当分支的状态。它会列出已修改、已暂存和未跟踪的文件 git status// 列出本地仓库中所有的分支,其中会特殊显示当前所在分支 git branch// 在当前分支的基础上创建一个新的分支,并切换到这个新的分支上 git checkout -b 新分支…

超声波清洗机洗眼镜好吗?一篇文章告诉你买超声波清洗机有必要吗

眼镜党们,你们是不是也有眼镜清洁的烦恼?日常生活中,我们佩戴的眼镜很容易就会沾上脏污,而经常擦拭又会损伤眼镜镜片,而且,长时间未清洁的尘埃、油脂乃至细菌,会影响我们的视觉健康,…

被问到MQ消息已丢失,该如何处理?

在分布式系统中,消息中间件(如 RabbitMQ、RocketMQ、Kafka、Pulsar 等)扮演着关键角色,用于解耦生产者和消费者,并确保数据传输的可靠性和顺序性。尽管我们通常会采取多种措施来防止消息丢失,如消息持久化、…

【C语言】动态内存管理(上)

文章目录 前言1.为什么要存在动态内存2. malloc和free2.1 malloc2.2 free2.3 使用实例(malloc和free) 3. calloc3.1 calloc例子 前言 本文开始将开始学习C语言中一个比较重要的知识点或者是操作——动态内存管理。由于本次的知识比较重要,为…

git 提交的进阶操作

cherry-pick cherry-pick 是 Git 中的一种操作,允许你从一个分支中选择特定的 commit,并将其应用到另一个分支。它的主要用途是将特定的更改引入到其他分支,而无需合并整个分支历史。这在修复 bug 或者移植某些功能时特别有用。 cherry-pick 的使用场景 Bug 修复: 例如,你…

WhisperX

文章目录 一、关于 WhisperX新闻 🚨 二、设置⚙️1、创建Python3.10环境2、安装PyTorch,例如Linux和Windows CUDA11.8:3、安装此repo4、Speaker Diarization 三、使用💬(命令行)1、English2、他语言例如德语…

厦门会展可视化:展览全方位动态展示

通过图扑先进的可视化技术,实时呈现厦门会展中心的各类活动和展览布局,提供直观的导航和详细的展区信息,让参观者轻松完成数字化体验。

ELK日志管理与应用

目录 一.ELK收集nginx日志 二.收集tomcat日志 三.Filebeat 一.ELK收集nginx日志 1.搭建好ELKlogstashkibana架构 2.关闭防火墙和selinux systemctl stop firewalld setenforce 0 3.安装nginx [rootlocalhost ~]# yum install epel-release.noarch -y [rootlocalhost …

谷粒商城实战笔记-37-前端基础-Vue-基本语法插件安装

文章目录 一,v-model1,双向绑定2,vue的双向绑定2.1 html元素上使用指令v-model2.2 model中声明对应属性2.3,验证view绑定modelmodel绑定view 完整代码 二,v-on1,指令简介2,在button按钮中添加v-…

【机器学习】超参数选择:解锁机器学习模型潜力的关键

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 超参数选择:解锁机器学习模型潜力的关键引言什么是超参数&#xff1…

【云原生】Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

谷歌账号忘记密码怎么办?这样找回——但是90%都是找不回的。关于密码有三个建议

Google账号忘记密码怎么办?谷歌账号的密码不记得了怎么办?如何找回谷歌账号的密码?谷歌账号记得账号名、辅助邮箱,但是密码不记得了还有办法吗... 在GG账号服务给朋友们提供服务的过程中,时不时会遇到这样的问题&…

Linux/Windows 系统分区

1. Windows 系统 1.1 系统分区 系统分区也叫做磁盘分区,即分盘; 举个例子,好比家里有一个大柜子,把衣服,鞋子,袜子都放在里面,由于没有隔断,找的时候非常麻烦,找是能找…

LCD、LED与OLED的区别

在现代显示技术中,LCD、LED和OLED是三种常见的显示技术,广泛应用于笔记本电脑、手机、电视等设备。每种技术都有其独特的优势和局限性,了解它们之间的差异对于选择合适的显示设备至关重要。本文将详细探讨这三种显示技术的特点及其在笔记本上…

2024大数据职业技能竞赛(国赛)模块E,子任务九:用散点图展示省份平均消费额

2024大数据职业技能竞赛(国赛)模块E数据展现题解 编写Vue工程代码,根据接口,用基础散点图展示2020年最高10个省份平均消费额(四舍五入保留两位小数),同时将用于图表展示的数据结构在浏览器的co…

rk3568 OpenHarmony4.1 Launcher定制开发—桌面壁纸替换

Launcher 作为系统人机交互的首要入口,提供应用图标的显示、点击启动、卸载应用,并提供桌面布局设置以及最近任务管理等功能。本文将介绍如何使用Deveco Studio进行单独launcher定制开发、然后编译并下载到开发板,以通过Launcher修改桌面背景…

《无线互联科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《无线互联科技》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《无线互联科技》级别? 答:国家级。主管单位:江苏省科学技术厅 主办单位&#xff1a…

生成式 AI 的发展方向,是 Chat 也是 Agent,双向奔赴

随着生成式AI技术的不断进步,关于其未来发展方向的讨论也愈发激烈。究竟生成式AI的未来是在对话系统(Chat)中展现智慧,还是在自主代理(Agent)中体现能力? 一、整体介绍 生成式AI在对话系统&…