1、下载安装 RocketMQ 的安装包分为两种,二进制包和源码包。1 下载 Apache RocketMQ 5.3.1的源码包后上传到linux https://dist.apache.org/repos/dist/release/rocketmq/5.3.1/rocketmq-all-5.3.1-source-release.zip2 解压编译 $ unzip rocketmq-all-5.3.1-source-release.zip $ cd rocketmq-all-5.3.1-source-release/ $ mvn -Prelease-all -DskipTests -Dspotbugs.skip=true clean install -U编译需要好几分钟 [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 03:35 min [INFO] Finished at: 2024-10-24T11:27:32+08:00 [INFO] -------------------------------------------$ cd distribution/target/rocketmq-5.3.1/rocketmq-5.3.1[root@localhost rocketmq-5.3.1]# pwd /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1 [root@localhost rocketmq-5.3.1]# ls benchmark bin conf lib LICENSE NOTICE README.md2 修改启动参数 2.1修改broker的运行脚本,内存不够可以适当的修改broker启动参数[root@localhost bin]# pwd /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/bin[root@localhost bin]# vim runbroker.sh ESC: set number 可以显示行数找到如下参数:-server -Xms8g -Xmx8g 看着改,只要能启动就行 改成 -server -Xms2g -Xmx2g 改成-server -Xms1g -Xmx1g 改成-server -Xms256m -Xmx256m101 choose_gc_log_directory 103 JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"2.2 修改nameServer的运行脚本, 修改89和94行-server -Xms4g -Xmx4g -Xmn2g 看着改,只要能启动就行 改成-server -Xms1g -Xmx1g -Xmn512m 改成-server -Xms2g -Xmx2g -Xmn1g 改成-server -Xms256m -Xmx256m -Xmn128m89 JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"90 JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabl ed -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"91 JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"92 JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"93 else94 JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"2.3 修改代理的端口默认是8080和8081修改成9080和9081,要不然8080可能会和tomcat的端口冲突 [root@localhost conf]# vi rmq-proxy.json {"rocketMQClusterName": "DefaultCluster","remotingListenPort": 9080,"grpcServerPort": 9081 }3 修改broker的配置文件,设置可以自动创建主题。 进入conf目录下,修改broker.conf文件[root@localhost conf]# pwd /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/conf[root@localhost conf]# vim broker.conf autoCreateTopicEnable=trueautoCreateTopicEnable:自动创建主题,不然需要手动创建出来 namesrvAddr:nameSrv地址可以写localhost因为nameSrv和broker在一个服务器,也可以用参数指定4 创建日志目录 /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/ mkdir logs5 启动NameServer后台模式启动,进入到bin目录,执行如下命令,如果不想后台启动的话就进入bin目录后./mynamesrv /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/5.1 需要先启动Name Server nohup sh bin/mqnamesrv > ./logs/namesrv.log &#!/bin/bash nohup sh bin/mqnamesrv > ./logs/namesrv.log & nohup sh bin/mqbroker -c conf/broker.conf -n 192.168.150.50:9876 --enable-proxy> ./logs/broker.log& exit 0[root@localhost rocketmq-5.3.1]# nohup sh bin/mqnamesrv > ./logs/namesrv.log &5.2 查看日志 [root@localhost rocketmq-5.3.1]# cat logs/namesrv.logJava HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release. The Name Server boot success. serializeType=JSON, address 0.0.0.0:98766、启动Broker+Proxy NameServer成功启动后,我们启动Broker和Proxy。这里我们使用 Local 模式部署,即 Broker 和 Proxy 同进程部署 进入到bin目录先启动broker nohup sh bin/mqbroker -c conf/broker.conf -n 192.168.150.50:9876 --enable-proxy> ./logs/broker.log&[root@localhost rocketmq-5.3.1]# nohup sh bin/mqbroker -c conf/broker.conf -n 192.168.150.50:9876 --enable-proxy> ./logs/broker.log&也可以指定配置文件-c conf/broker.conf,用-pc conf/proxyConfig.json来改默认占用的8080和8081端口,改端口看下面的备注。 nohup bin/mqbroker -n 127.0.0.1:9876 -pc conf/proxyConfig.json --enable-proxy &nohup sh bin/mqbroker -c conf/broker.conf -n 192.168.150.50:9876 --enable-proxy> ./logs/broker.log& [root@localhost logs]# cat broker.log Thu Oct 24 15:17:52 CST 2024 rocketmq-proxy startup successfullyhttp://localhost:9999/rocketmq/send[root@localhost logs]# cat broker.log Unrecognized VM option 'UseBiasedLocking' Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.Jdk21偏向锁被废弃了,移除这个VM参数 打开rocketmq 的/bin/runbroker.sh,移除UseBiasedLocking参数。JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"或许出现的其他问题 RocketMQ连接异常sendDefaultImpl call timeout装并启动好RocketMQ后,在代码中远程连接RocketMQ,报以下错误:org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException:sendDefaultImpl call timeout at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:588)at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1223)at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1173)at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:214)at com.flying.demo.Producer.main(Producer.java:25)这个错误其实是启动RocketMQ的namesrv,broker没有指IP。 假如IP是:192.168.1.135 那么启动namesrv时,用以下方法: nohup sh bin/mqnamesrv -n "192.168.1.135:9876" & 启动broker时,用以下方法: 修改conf/broker.conf,加入:brokerIP1=192.168.1.135 启动:nohup ./bin/mqbroker -n localhost:9876 -c conf/broker.conf autoCreateTopicEnable=true &备注:启动失败如果是8080端口已经绑定可以修改端口 ========================RocketMQ5.0.0 版本增加了 Proxy 模块,启动时默认会用到 8081 端口,当端口被占用时,broker/proxy 将无法启动,修改 proxy 端口方法如下:(1)在 conf 目录下修改rmq-proxy.json 文件,注意文件格式为 json,所以内容须为 json 格式;private int remotingListenPort = 8080;private Integer grpcServerPort = 8081;{// 代理监听端口"remotingListenPort": 9080,// gRPC服务器端口"grpcServerPort": 9081,// 对应namesr的ip,这个单机的时候可以不用加,集群的没测试过"namesrvAddr":"123.45.67.891:6789;198.76.54.321:6789" }修改代理的端口默认是8080和8081 [root@localhost conf]# vi rmq-proxy.json {"rocketMQClusterName": "DefaultCluster","remotingListenPort": 9080,"grpcServerPort": 9081 }=================================================================7. 关闭服务器和开机自启 进入到/usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/目录执行sh bin/mqshutdown namesrv sh bin/mqshutdown broker8 使用代码测试[root@localhost bin]# sh mqadmin updateTopic -n 192.168.150.50:9876 -b 192.168.150.50:10911 -t MyTopic -w 4 -r 4create topic to 192.168.150.50:10911 success. TopicConfig [topicName=MyTopic, readQueueNums=4, writeQueueNums=4, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false, attributes={}]-n 192.168.150.50:9876:Name Server地址。 -b 192.168.150.50:10911:Broker地址。 -t MyTopic:主题名称。 -w 4:写队列数量。 -r 4:读队列数量。下面的内容还没测试到9 测试 在进行工具测试消息收发之前,我们需要告诉客户端NameServer的地址,RocketMQ有多种方式在客户端中设置NameServer地址,这里我们利用环境变量NAMESRV_ADDR export NAMESRV_ADDR=localhost:9876 sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer10 在rocketmq-dashboard查看消息,也可以直接用程序测试1. docker 镜像安装 ① 安装docker,拉取 rocketmq-dashboard 镜像 docker pull apacherocketmq/rocketmq-dashboard:latest② docker 容器中运行 rocketmq-dashboard docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.150.50:9876" -p 9999:9999 -t apacherocketmq/rocketmq-dashboard:latest进入容器内部 docker exec -it 05ac89fbf3dd /bin/bash docker cp 05ac89fbf3dd:/rocketmq-dashboard.jar /=============================================================================================2 rocketmq-dashboard的使用 https://rocketmq.apache.org/zh/docs/deploymentOperations/04Dashboardhttp://192.168.150.50:8001