一、RocketMQ下载

目前RocketMQ的版本主要分为4.x系列和5.x系列,多数用的是4.x系列,5.X增加了proxy模式,同时也正式在开源版本中增加了任意时间的延迟消息的支持,这个对我们来说是非常有用的。RocketMQ的官方下载地址为:

https://rocketmq.apache.org/zh/download

RocketMQ 的安装包分为两种,二进制包和源码包,可以基于源码包进行启动,也可以基于二进制发布包进行启动。

针对4.x的下载地址如下:

源码包:https://dist.apache.org/repos/dist/release/rocketmq/4.9.7/rocketmq-all-4.9.7-source-release.zip

发布包:https://dist.apache.org/repos/dist/release/rocketmq/4.9.7/rocketmq-all-4.9.7-bin-release.zip

针对5.x的下载地址如下:

源码包:https://dist.apache.org/repos/dist/release/rocketmq/5.1.3/rocketmq-all-5.1.3-source-release.zip

发布包:https://dist.apache.org/repos/dist/release/rocketmq/5.1.3/rocketmq-all-5.1.3-bin-release.zip

二、RocketMQ的安装

2.1、Windows系统下的安装

1、在官网上选择对应的版本和下载,source代表是源码,binary代表是发布版,如下所示:

image.png

控制台下载

image.png

下载完成后,建议创建一个ROCKETMQ_HOME的系统环境变量,便于程序在启动时候的一些默认配置。

变量名:ROCKETMQ_HOME

变量值:MQ解压路径\MQ文件夹名

image.png

2.2、Linux/Mac系统下的安装

对于非Windows系统下的安装,也是建议提前配置好JAVA_HOME环境变量和ROCKETMQ_HOME环境变量的,通常在/etc/profile文件下进行环境变量配置,同时配置PATH环境变量。

三、启动

RocketMQ的物理架构中,都是需要先启动NameServer再启动Broker的。所以启动顺序一定不要搞反了。

windows系统一般是cmd命令结尾的文件,非windows系统一般是不包含扩展名的文件。

3.1、RocketMQ4.9.7的启动

这里以Mac的环境为例,介绍RocketMQ4.9.7版本安装过程,当前安装的Mac Book Pro的电脑内存为16G。

3.1.1、解压

1、解压rocketmq-all-4.9.7-bin-release.zip到自定义的某个目录

2、切换到bin目录下,更改RocketMQ默认的JVM大小,如果未进行更改,则默认会占用4G的JVM空间,更改bin/runserver.sh文件中的65-80行中的JVM参数设置,更改最大堆和最小堆的内存为适合自己当前环境的大小配置,个人这里修改为512M用于测试:

choose_gc_options()
{
    # Example of JAVA_MAJOR_VERSION value : '1', '9', '10', '11', ...
    # '1' means releases befor Java 9
    JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | sed -r -n 's/.* version "([0-9]*).*$/\1/p')
    if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "9" ] ; then
      JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
      JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
      JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
      JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
    else
      JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
      JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
      JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M"
    

3.1.2、启动NameServer

修改完成后,在RocketMQ的根目录下执行mqnamesrv命令,启动NameServer,该命令会间接调用runserver.sh脚本,操作如下:

### 启动namesrv
$ nohup sh bin/mqnamesrv &
 
### 验证namesrv是否启动成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log

启动成功日志如下:

2023-09-30 16:47:50 INFO main - tls.client.keyPassword = null
2023-09-30 16:47:50 INFO main - tls.client.certPath = null
2023-09-30 16:47:50 INFO main - tls.client.authServer = false
2023-09-30 16:47:50 INFO main - tls.client.trustCertPath = null
2023-09-30 16:47:50 INFO main - Using JDK SSL provider
2023-09-30 16:47:51 INFO main - SSLContext created for server
2023-09-30 16:47:51 INFO NettyEventExecutor - NettyEventExecutor service started
2023-09-30 16:47:51 INFO main - Try to start service thread:FileWatchService started:false lastThread:null
2023-09-30 16:47:51 INFO FileWatchService - FileWatchService service started
2023-09-30 16:47:51 INFO main - The Name Server boot success. serializeType=JSON

我们可以在namesrv.log 中看到 'The Name Server boot success..', 表示NameServer 已成功启动。

然后再命令行中输入ps -ef| grep java命令,查看JVM内存是否修改成功:

/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/bin/java -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC -verbose:gc -Xloggc:/Volumes/RAMDisk/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m -XX:-OmitStackTraceInFastThrow -XX:-UseLargePages -cp .:/soft/rocketmq-all-4.9.4-bin-release/bin/../conf:/soft/rocketmq-all-4.9.4-bin-release/bin/../lib/*:.:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_333.jdk/Contents/Home/lib/tools.jar org.apache.rocketmq.namesrv.NamesrvStartup

可以看到RocketMQ的JVM内存已经更改为我们配置的大小。

3.1.3、启动Broker

NameServer成功启动后,我们开始启动broker,同样在启动之前我们编辑下bin目录下的runbroker.sh文件,修改大概85行的位置处的JVM内存大小,这里修改为512m,默认不修改的情况下为8G:

然后,切换到rocketmq的根目录下,执行如下命令启动broker:

### 先启动broker
$ nohup sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true &

### 验证broker是否启动成功, 比如, broker的ip是192.168.1.2 然后名字是broker-a
$ tail -f ~/logs/rocketmqlogs/Broker.log 

其中autoCreateTopicEnable=true参数代表,自动创建主题。

如果在日志中看到如下日志说明broker启动成功:

2023-09-30 16:50:05 INFO main - Try to start service thread:FlushRealTimeService started:false lastThread:null
2023-09-30 16:50:05 INFO main - Try to start service thread:FlushDiskWatcher started:false lastThread:null
2023-09-30 16:50:05 INFO main - Try to start service thread:StoreStatsService started:false lastThread:null
2023-09-30 16:50:05 INFO main - Try to start service thread:FileWatchService started:false lastThread:null
2023-09-30 16:50:05 INFO FileWatchService - FileWatchService service started
2023-09-30 16:50:05 INFO main - Try to start service thread:PullRequestHoldService started:false lastThread:null
2023-09-30 16:50:05 INFO PullRequestHoldService - PullRequestHoldService service started
2023-09-30 16:50:05 INFO main - Try to start service thread:TransactionalMessageCheckService started:false lastThread:null
2023-09-30 16:50:06 INFO brokerOutApi_thread_1 - register broker[0]to name server localhost:9876 OK
2023-09-30 16:50:06 INFO main - The broker[MacBook-Pro.local, 192.168.2.105:10911] boot success. serializeType=JSON and name server is localhost:9876

至此,一个单Master的RocketMQ集群已经部署起来了。

默认情况RocketMQ的数据目录存储在user.home下的目录,一个logs一个store目录,如果需要更改,则在启动文件runbroker.sh 文件中设置:JAVA_OPT="${JAVA_OPT} -Duser.home=自定义的存储目录设置即可"

3.2、RocketMQ5.1.3的启动

这里以Mac的环境为例,介绍RocketMQ5.1.3版本安装过程,当前安装的Mac Book Pro的电脑内存为16G,5.1.3虽然增加了proxy模块,但是我们启动的时候依然可以用4.x方式启动的,这里暂不详细说明。

四、启动UI控制台

下载地址:https://github.com/apache/rocketmq-dashboard(opens new window)

控制台端口及服务地址配置:

下载完成之后,进入‘\rocketmq-console\src\main\resources’文件夹,打开‘application.properties’进行配置。

image.png

因为本身控制台也是单独的Java应用,默认的是8080,为了防止与Tomcat冲突,我改成了8089

image.png

然后进入dashboard根目录执行‘mvn clean package -Dmaven.test.skip=true’,编译生成。

image.png

然后选择jar包:

image.png

执行‘java -jar rocketmq-dashboard-1.0.0.jar’,启动dashboard。

image.png

这样就看到了一个控制台的访问效果

五、快速启动脚本

六、关闭服务器

我们可以通过以下方式关闭服务

$ sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK

$ sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐