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.zip 2 解压编译 $ 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.md 2 修改启动参数 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 -Xmx256m 101 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 -Xmn128m 89 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 else 94 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=true autoCreateTopicEnable:自动创建主题,不然需要手动创建出来 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 logs 5 启动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.log Java 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:9876 6、启动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 successfully http://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 broker 8 使用代码测试 [root@localhost bin]# sh mqadmin updateTopic -n 192.168.150.50:9876 -b 192.168.150.50:10911 -t MyTopic -w 4 -r 4 create 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.Consumer 10 在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/04Dashboard http://192.168.150.50:8001