【实战】手把手教你从 0 到 1 搭建一套 RocketMQ 集群

大家好,我是君哥。今天来分享怎样搭建 RocketMQ 集群。

本文搭建集群使用的环境是 2 个云主机,架构如下:

a87030beb3b41bde65757095b2508ebd.png

在 47.xx.xx.xx 和 39.xx.xx.xx 上分别部署一个 Name Server 和 Broker 主节点,这里不搭建从节点。也就是官网介绍的 2m-noslave 构建模式。

注意:官网有三种配置模式:2m-2s-sync、2m-2s-async、2m-noslave。这三种配置都是使用异步刷盘策略:ASYNC_FLUSH。

集群搭建成功后,Broker 会向 Name Server 注册 Topic 路由信息,Producer 和 Consumer 则从 Name Server 获取路由信息,然后 Producer 根据路由信息向 Broker 发送消息,Consumer 则根据路由信息从 Broker 拉取消息。

1 准备工作

要安装 RocketMQ,首先需要在云主机上安装 Java 环境,Maven 环境。这里就不做详细介绍了。

Java 和 Maven 环境安装好以后,从官网下载最新版本,地址如下:

https://dlcdn.apache.org/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip

下载完成后,进行解压和编译,执行如下命令:

> unzip rocketmq-all-4.9.4-source-release.zip
> cd rocketmq-all-4.9.4-source-release/
> mvn -Prelease-all -DskipTests clean install -U
> cd distribution/target/rocketmq-4.9.4/rocketmq-4.9.4

看到下图输出时,编译成功:

02866967d4aa33af1ff54e54e9058510.png

2 启动

2.1 启动 Name Server

因为我的云主机内存比较小,而 RocketMQ 默认启动 Name Server 需要的 JVM 堆内存默认是 4g,所以需要修改默认堆内存。修改文件为:

rocketmq-all-4.9.4-source-release/distribution/target/rocketmq-4.9.4/rocketmq-4.9.4/bin/runserver.sh

修改后的配置如下:

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

修改完成后,执行下面命令:

nohup sh bin/mqnamesrv &

启动成功后,nohup.out 文件中打印如下日志:

The Name Server boot success. serializeType=JSON

搭建好一台机器后,用同样的方式搭建第二台机器。

2.2 启动 Broker

同样,RocketMQ 启动 Broker 需要的 JVM 堆内存默认是 8g,所以需要修改堆内存。修改文件为:

rocketmq-all-4.9.4-source-release/distribution/target/rocketmq-4.9.4/rocketmq-4.9.4/bin/runbroker.sh

修改后的配置如下:

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

创建 conf.properties 文件,内容如下:

brokerClusterName = MyTestCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr=127.0.0.1:9876;47.xx.xx.xx:9876

配置好后,启动 broker-a 节点,启动 命令如下:

nohup bash bin/mqbroker -c conf/broker.properties &

Broker 启动成功后,Name Server 的日志如下图:

c5a22ebbe3ae55e3efc97e37884ba19f.png

用同样的方式启动 broker-b,conf.properties 文件配置如下:

#集群名称
brokerClusterName = MyTestCluster
#broker名称
brokerName = broker-b
brokerId = 0
#删除消息存储过期文件的时间为凌晨4点
deleteWhen = 04
#未发生更新的消息存储文件的保留时长为48小时,48小时后过期,将会被删除
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr=127.0.0.1:9876;xx.xx.xx.xx:9876

启动成功后,执行 mqadmin 命令查看集群信息:

[root@rocketmq-4.9.4]# ./bin/mqadmin topicList -n 127.0.0.1:9876
MyTestCluster
RMQ_SYS_TRANS_HALF_TOPIC
BenchmarkTest
OFFSET_MOVED_EVENT
iZ8vbfyc7hfzygtpgapblyZ
TBW102
SELF_TEST_TOPIC
DefaultCluster
iZ2ze4m2ri7irk6au5mbfgZ
SCHEDULE_TOPIC_XXXX
DefaultCluster_REPLY_TOPIC
broker-b
broker-a
MyTestCluster_REPLY_TOPIC

注意:执行上面命令需要修改 bin/tools.sh 中的 JVM 参数,配置如下:

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"

3 dashboard

3.1 安装

安装 dashboard,需要编译源代码,源码 github 地址如下:

https://github.com/apache/rocketmq-dashboard

下载之后,修改 application.yml 参数,我这里只修改了 Name Server 地址:

rocketmq:config:namesrvAddrs:- 127.0.0.1:9876- 47.xx.xx.xx:9876

然后执行 Maven 打包命令,打出 jar 包:

mvn clean package -Dmaven.test.skip=true

打好 jar 包后上传到服务器,执行下面命令启动:

java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar

启动成功后,输出下图的日志:

131cab045a99211e0a922a7a7b9657a9.png

3.2 测试

浏览器输入 http://39.xx.xx.xx:8080/ 界面如下:

2a9a727ec0f218b6427a95011f811f61.png

使用下面命令创建一个 Topic,名字叫 MyTestTopic:

sh bin/mqadmin updateTopic -n 127.0.0.1:9876\;47.92.71.246:9876  -c MyTestCluster  -t MyTestTopic

这是可以在界面上看到创建的 Topic,如下图:

e8a3765168d58af260e5e932528751e2.png

使用命令发送一条消息:

[root@rocketmq-4.9.4]# sh bin/mqadmin sendMessage -n 127.0.0.1:9876 -t MyTestTopic -p 'hello test message'
#Broker Name                      #QID  #Send Result            #MsgId
broker-a                          1     SEND_OK                 7F000001D3C3339097527B50D1740000

在界面上查看消息,如下图:

8ce63b843a07d2287f9fccea73971f69.png

4 总结

这篇文章主要讲述了 RocketMQ 集群的搭建,希望能对大家理解 RocketMQ 有所帮助。

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

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

相关文章

敏捷制造:并不是你想像的矛盾体

\关键点\敏捷制造使企业能够比传统制造方式更快更有效地取悦客户 \敏捷方法实际上是为制造而不是软件而开发的 \敏捷制造需要从上到下的数字视角和承诺 \敏捷制造需要新的技能,还需要授权、扁平化合作和贯穿整个组织的沟通 \迈向敏捷制造的第一步可以是通过升级传统…

上海一趟,我陷入了沉思

hi,这里是桑小榆。2022年8月20日,我去了一趟上海,交了很多新朋友,和各行业且具备独立思考的伙伴交流了很多,也吸收了很多的新东西。此篇我将分享我的感悟,并以自己的角度剖析存在的问题。痛苦与症状在此之前…

Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件

为什么80%的码农都做不了架构师?>>> Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件 http://www.swiper.com.cn/ 转载于:https://my.oschina.net/huqiji/blog/800482

vue实现todo功能(一):搭建vue-webpack环境

前言 我最开始因为项目原因接触的是react,对于我这种美观狂而言,react中难以调解的css让我十分抓狂,说是在写页面,因为不能写自己的样式,像是在拼凑页面,没意思。于是我开始了解vue这种将css html javacrip…

单模光电转换器怎么接_以太网光纤收发器怎么用?

以太网光纤收发器有单模、多模,单纤、双纤,百兆、千兆,电信级和工业级品质,稳定可靠,是网络高清监控优选设备。那么,以太网光纤收发器怎么用呢?接下来就由飞畅科技的小编来为大家详细介绍下以太…

WPF效果第一百九十六篇之彩色马蹄形图

上一篇又是基于ListBox改了改模板实现了点不一样的效果;今天来分享一点这些天一直摸索的好玩的效果;闲话不多扯直接看效果:1、对于各种定义就直接看下面:https://www.wigglepixel.nl/en/blog/what-are-color-spaces-color-profiles-and-gamma-correction2、关于马蹄图我找到了S…

grub4dos中的不容易理解的问题

2019独角兽企业重金招聘Python工程师标准>>> menu.lst中写有菜单,但又发现很多人使用BCD,是否是这样,通过menu.lst中的菜单引导的系统,是不通过BCD文件引导的,还是说它们是必须同时有的,并且要关联呢&#…

卸载wps后桌面上的office文件图标变成了白色

文章目录卸载wps后桌面上的office文件图标变成了白色第一步:第二步卸载wps后桌面上的office文件图标变成了白色 作者:wyf 第一步: **win(图标)R,输入regedit,点击确定**第二步 2、找到HKEY_CLASSES_ROOT…

springboot单例模式注入对象_Spring 中经典的 9 种设计模式,打死也要记住啊!

本文转载自公众号“Java专栏1.简单工厂(非23种设计模式中的一种)2.工厂方法3.单例模式4.适配器模式5.装饰器模式6.代理模式7.观察者模式8.策略模式9.模版方法模式Spring中涉及的设计模式总结1.简单工厂(非23种设计模式中的一种)实现方式:BeanFactory。Spring中的Bea…

通过项目逐步深入了解Mybatis(四)

相关阅读&#xff1a; 1、通过项目逐步深入了解Mybatis<一> 2、通过项目逐步深入了解Mybatis<二> 3、通过项目逐步深入了解Mybatis<三> 本项目所有代码及文档都托管在 Github地址&#xff1a;https://github.com/zhisheng17/mybatis 延迟加载 什么是延迟加载…

读两本敦煌书杂记-敦煌的历史(一)

前两天看了樊锦诗院长的讲座&#xff0c;八十几岁的高龄还讲的兴致盎然&#xff0c;虽然全长两个多小时但感觉一点不嫌长&#xff0c;听完深受感动。意犹未尽&#xff0c;又迫不及待的买了几本书来读。一本是《灿烂佛宫》&#xff0c;一本是《报恩父母经典故事》。因为我自己从…

在anaconda中安装tensorflow-GPU版本

在anaconda中安装tensorflow-GPU版本 第一步&#xff1a;去anaconda官网下载&#xff0c;我下载的是anaconda (python3.7版本&#xff09; anaconda下载链接&#xff1a;点击link 进去之后网页最下面有要下载的版本 安装的具体步骤&#xff1a;点击 link 第二步&#xff1a;…

云服务远程登录---设置安全组

对于小白来说购买了云服务不知道怎么开放端口和用xsell远程连接下面是步骤&#xff1a; 下面就可以玩耍了转载于:https://www.cnblogs.com/zhaojingyu/p/9021068.html

高程数据处理_珠峰长高了吗?新高程怎么算出来的?揭秘

珠穆朗玛峰是世界上海拔最高的山峰&#xff0c;被称为世界第三极&#xff0c;是亚洲的水塔。12月8日&#xff0c;珠穆朗玛峰最新高程公布&#xff0c;为8848.86米。珠峰长高了吗&#xff1f;怎么测算出来的&#xff1f;和以往的测量相比&#xff0c;“新”在哪里&#xff1f;就…

微服务框架开发(二)—扩展spring schema

2019独角兽企业重金招聘Python工程师标准>>> 一、实体bean的定义 回顾一下我们需要定义的4个标签 定义注册中心标签&#xff1a;<xmen:registry name"registry" regProtocol"zookeeper" address"127.0.0.1:2181" connectTimeout&q…

如何找tensorflow-gpu版本对应的cuda和cudnn

第一步 先创建一个虚拟环境&#xff08;我是在anaconda Prompt中创建&#xff09;&#xff1a;conda create -n TF1.14 python3.6 第二步 进入虚拟环境conda activate TF1.14 第三步 安装tensorflow-gpu版本 pip install tensorflow-gpu1.14.0 -i HTTPS://pypi.doubanio…

基于干净语言和好奇心的敏捷指导

\关键要点\\通过简单的问题可以挖掘出产品中包含的真正有价值的信息&#xff0c;以及我们所期望的合作方式。\\t在以“干净问题”为基础的文化中&#xff0c;没有问题会遭到嘲笑&#xff0c;而且不存在“愚蠢”的问题。\\t“尽其所能地工作”和“干净反馈”等练习可以帮助敏捷团…

origin如何绘制双y轴曲线_Origin用矩阵绘制多层曲面映射图

点击上方关注点击下方点赞【导读】怎样绘制多曲面映射图&#xff1f;1.矩阵数据的准备1.1 XYYYY型数据我们在实验中得到一张Excel表格一列X表示电场强度&#xff0c;负载量不同的多列Y又分为Pm、Pr两组。那么我们需要分别构造Pm和Pr两组XYYYY型数据表。那么全选Pr表中的XYYYY型…

北京大学Tensorflow2.0笔记

激活函数 目前很少用这个激活函数&#xff0c;因为在深度神经网络中更新参数时需要从输出层到输入层逐层进行链式求导&#xff0c;而sigmoid函数倒数值为0-0.25之间&#xff0c;链式求导需要多层导数连续相乘&#xff0c;会出现多个0-0.25之间的连续相乘&#xff0c;结果趋于零…

开源新工具 Azure Developer CLI

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;5分钟)翻译自 Savannah Ostrowski 的博客今天&#xff0c;我们很高兴地宣布 Azure Developer CLI (azd) 公共预览版——一种新的开源工具&#xff0c;可加快入门Azure 所需的时间。Azure Developer CLI 提供了对开发者…