Ubuntu 安装 RocketMQ

2,052 阅读1分钟

相关知识和概念:rocketmq.apache.org/zh/docs/

安装并启动RocketMQ

  1. 下载二进制包:www.apache.org/dyn/closer.…
  2. 启动
# 单组节点单副本模式
### 首先启动Name Server
$ nohup sh mqnamesrv &
 
### 验证Name Server 是否启动成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
# 验证是否成功
cat nohup.out
The Name Server boot success. serializeType=JSON

# 关闭服务
sh bin/mqshutdown namesrv



# 启动 Broker+Proxy
$ nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &
# 从配置文件启动
# nohup sh bin/mqbroker -n 127.0.0.1:9876 -c ./conf/broker.conf  --enable-proxy &

### 验证Broker 是否启动成功,例如Broker的IP为:192.168.1.2,且名称为broker-a
$ tail -f ~/logs/rocketmqlogs/broker_default.log 
The broker[xxx, 192.169.1.2:10911] boot success...

# 关闭服务
$ sh bin/mqshutdown broker

如果感觉启动有问题,可以去掉nohup直接将日志打印在终端,方便查看。

启动报错:启动mqnamesrv失败,内存不足

打开runserver.sh可以看见,内存要4G,当然不足咯,我虚拟机一共才2G

解决方案:修改为需要的内存大小。需要修改文件:runserver.shrunbroker.sh

参考文章:blog.csdn.net/qq_18948359…

Xms:表示JVM Heap(堆内存)最小尺寸,初始分配空间;
Xmx:表示JVM Heap(堆内存)最大允许的尺寸,过小可能会导致java.lang.OutOfMemory
PermSize:永久代最小尺寸,初始分配
MaxPermSize:永久代最大的尺寸,过小会导致java.lang.OutOfMemoryError:PermGen space
MetaspaceSize:元空间最小尺寸,初始分配
MaxMetaspaceSize:元空间最大的尺寸
注:Java8以后,永久代被元空间取代,同时元空间不像永久代一样受制于内存,元空间是基于操作系统内存的,理论上可以一直扩展内存知道操作系统的极限。

安装并启动RocketMQ Dashboard

RocketMQ Dashboard 是 RocketMQ 的管控利器,为用户提供客户端和应用程序的各种事件、性能的统计信息,支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。

docker启动

# 拉取镜像
$ docker pull apacherocketmq/rocketmq-dashboard:latest
# 创建容器并启动
$ docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest

namesrv.addr:port 替换为 rocketmq 中配置的 nameserver 地址:端口号。
开放端口号:8080,9876,10911,11011 端口

  • 云服务器:设置安全组访问规则
  • 本地虚拟机:关闭防火墙,或 -add-port

源码启动

M1直接启动不行,所以从源码启动试试。
源码地址:apache/rocketmq-dashboard
下载并解压,切换至源码目录 rocketmq-dashboard-master/

  1. 先修改配置src/main/resources/application.properties

  2. 编译 rocketmq-dashboard

$ mvn clean package -Dmaven.test.skip=true
  1. 运行 rocketmq-dashboard
$ java -jar target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar

使用报错:RocketMQ控制台手动新增主题,报错:clusterName or brokerName can not be all blank

几经排查,发现/logs/rocketmqlogs/broker.log有报错信息,

2023-02-14 11:23:46 ERROR BrokerControllerScheduledThread1 - ScheduledTask refresh metadata exception
org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to null failed
	at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:473)
	at org.apache.rocketmq.broker.out.BrokerOuterAPI.getBrokerClusterInfo(BrokerOuterAPI.java:1052)
	at org.apache.rocketmq.broker.out.BrokerOuterAPI.refreshMetadata(BrokerOuterAPI.java:1071)
	at org.apache.rocketmq.broker.BrokerController$11.run(BrokerController.java:676)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)

最后发现是原来是官方的启动文件有问题。导致broker启动时没有加载到启动参数。修改启动文件bin/mqbroker,将[[修改为[。去掉一个冒号。

参考文章:
blog.csdn.net/qq_37436987… rocketmq.apache.org/zh/docs/qui…