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

前言

作为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集群相关的知识点。

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

在这里插入图片描述

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

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

相关文章

[PM]产品运营

生命周期 运营阶段 主要工作 拉新 新用户的定义 冷启动 拉新方式 促活 用户活跃的原因 量化活跃度 运营社区化/内容化 留存 用户流失 培养用户习惯 用户挽回 变现 变现方式 付费模式 广告模式 数据变现 变现指标 传播 营销 认识营销 电商营销中心 拼团活动 1.需求整理 2.…

使用LVS+NGinx+Netty实现数据接入

数据接入 链接参考文档 LVSKeepalived项目 车辆数据上收,TBox通过TCP协议连接到TSP平台 建立连接后进行数据上传。也可借由该连接实现远程控制等操作。 通过搭建 LV—NGinx—Netty实现高并发数据接入 LVS:四层负载均衡(位于内核层&#x…

【数据结构进阶】二叉搜索树

🔥个人主页: Forcible Bug Maker 🔥专栏: C || 数据结构 目录 🌈前言🔥二叉搜索树🔥 二叉搜索树的实现Insert(插入)find(查找)erase(删除)destro…

【中项】系统集成项目管理工程师-第2章 信息技术发展-2.1信息技术及其发展-2.1.1计算机软硬件与2.1.2计算机网络

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

车载音视频App框架设计

简介 统一播放器提供媒体播放一致性的交互和视觉体验,减少各个媒体应用和场景独自开发的重复工作量,实现媒体播放链路的一致性,减少碎片化的Bug。本文面向应用开发者介绍如何快速接入媒体播放器。 主要功能: 新设计的统一播放U…

Windows FFmpeg 开发环境搭建

FFmpeg 开发环境搭建 FFmpeg命令行环境搭建使用FFmpeg官方编译的库Windows编译FFmpeg1. 下载[msys2](https://www.msys2.org/#installation)2. 安装完成之后,将安装⽬录下的msys2_shell.cmd中注释掉的 rem set3. 修改pacman 镜像源并安装依赖4. 下载并编译源码 FFmpeg命令行环境…

【C++】 string类的模拟实现

目录 一、我们先创建三个文件分别为 String.h(声明)、String.cpp(定义)、teat.cpp(测试) 二、成员函数 构造函数与析构函数 🌟string() 🌟string(const char* str) &#x1f…

c++基础(类和对象中)(类的默认成员函数)

目录 一.构造函数(类似初始化) 1.概念 2.构造函数的特点 二.析构函数(类似 销毁对象/空间) 三.拷贝构造函数(类似复制粘贴的一种 初始化 ) 1.概念: 2.拷贝构造的特点: 四.赋值运算符重载&#xff08…

【MATLAB实战】基于UNet的肺结节的检测

数据: 训练过程图 算法简介: UNet网络是分割任务中的一个经典模型,因其整体形状与"U"相似而得名,"U"形结构有助于捕获多尺度信息,并促进了特征的精确重建,该网络整体由编码器,解码器以及跳跃连接三部分组成。 编码器由…

数据结构第一讲:复杂度

数据结构第一讲:复杂度 1.数据结构前言1.1什么是数据结构1.2算法 2.算法效率2.1复杂度的概念 3.时间复杂度3.1案例13.2案例23.3案例33.4案例43.5案例53.6案例63.7案例7 4.空间复杂度4.1案例14.2案例2 5.常见复杂度对比6.轮转数组题目分析6.1优化16.2优化2 博客简介&…

走进MongoDB--update和remove操作

操作任务 1.复制集合s,新集合名称为sbak。在sbak中完成以下操作 2.修改学号为1001同学的年龄为20岁 3.所有男同学的文档增加addr属性,值为“hebei” 4.删除wangwu同学的年龄属性 5.修改zhangsi同学的年龄属性为20,如果没有满足条件的则插…

DNS域名解析轮询过程图解

Q1: 先从本地浏览器/系统DNS缓存查找是否有解析记录 Q2:从本地hosts文件查找解析记录 Q3:如果前2步没有找到本地解析记录 hosts也无记录就从本地域名服务器查找 Q4:本地域名服务器区域缓存记录查找 Q5:查找转发器是否有 Q6--Q7:查找根com顶级域名服务器 Q8: 查找test.com…

力扣 字符串章节 344反转字符串

编写一个函数,将输入字符翻转过来,原地修改 思路 字符串用数组的形式存储,数组长度分奇数和偶数两种 如果长度是奇数,循环到str.size()/2,中间值不动 如果长度是偶数,循环到str.size()/2,全部参与反转 …

【简单介绍Gitea】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! Gitea.🍀 Gitea是一个开源的,轻量级的代码托管解决方案,它是…

收到赵健老师的限量签名书,开心

收到赵老师的亲笔签名📖,开心一下下[愉快],由外而内,首先是我喜欢的线装书,展开阅读舒适,手感友好,纸张更是很讲究,密度很高也很温润,应该是进口纸,每个对页的…

Linux主机添加ipv6地址

一、添加网卡ipv6地址 通过命令行添加 ip add add 2001:db8:0:1::102/64 dev ens160 通过编辑/etc/sysconfig/network-scripts/目录下的ifcfg-配置文件添加 TYPEEthernet BOOTPROTOdhcp # 或者指定为 "static" 如果你想要静态配置 DEFROUTEyes IPV4_FAILURE_FAT…

Uniapp基础篇(持续更新)

1. Uni-app常用内置组件 view 视图容器 scroll-view 可滚动视图区域,用于区域滚动。需注意在webview渲染的页面中,区域滚动的性能不及页面滚动。 swiper 滑块视图容器。一般用于左右滑动或上下滑动,比如banner轮播图。 image uniapp官方iam…

萝卜快跑无人出租车是有人远程代驾? 客服:没有人操控

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 近期“萝卜快跑”无人驾驶网约车相关话题引发网友热议。 有网传图片显示,萝卜快跑机器人智控中心,有真人坐在带有方向盘的屏幕前; 有网友认为所谓的无人网约车&am…

Unty 崩溃问题(Burst 1.8.2)

错误代码: Assertion failed on expression: exception SCRIPTING_NULL UnityEngine.StackTraceUtility:ExtractStackTrace () Unity.Burst.BurstCompiler:SendRawCommandToCompiler (string Unity版本:2021.3.17F1,Burst 1.8.2 表现&…

黑马程序员瑞吉外卖Day6小程序空白无显示

做项目时出现问题之druid连接池报错 报错discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/sky_take_out?serverTimezoneAsia/Shanghai&useUnicodetrue&characterEncodingutf-8&zeroDateTimeBehaviorconvertToNull&use…