🎯 导读:该文档记录了在Linux环境下使用Apache RocketMQ的安装与配置流程,包括下载RocketMQ压缩包、上传至服务器并解压、配置环境变量及对nameServer和broker的运行脚本和配置文件进行调整。文档还提供了使用Docker安装部署的方法,以及启动nameServer和broker容器的具体命令。此外,文档涉及了RocketMQ控制台的安装步骤,并对在使用过程中遇到的问题给出了相应的解决方案,如通过修改配置启用安全性和账号密码验证。
文章目录
- 安装方式一:Linux常规安装
- 下载RocketMQ
- 上传服务器
- 解压
- 配置环境变量
- 修改nameServer的运行脚本
- 修改broker的运行脚本
- 修改broker的配置文件
- 启动
- RocketMQ控制台(RocketMQ-Console)的安装
- 安装方式二:Docker安装RocketMQ
- 下载RockerMQ需要的镜像
- 启动NameServer服务
- 创建NameServer数据存储路径
- 启动NameServer容器
- 启动Broker服务
- 创建Broker数据存储路径
- 创建conf配置文件目录
- 在配置文件目录下创建broker.conf配置文件
- 启动Broker容器
- 启动控制台
- 正常启动后的docker ps
- 访问控制台
- 安装方式三:官网Docker安装教程
- 拉取RocketMQ镜像
- 创建容器共享网络
- 启动NameServer
- 创建broker
- 控制台
- RocketMQ安全
- Broker开启权限控制
- Broker配置账号密码
- Dokcer部署怎么改
- 控制面板连接broker配置账号密码
- springBoot配置文件使用账号密码
- 其他
- 发送消息报错
- 云服务器开放端口
- 控制台操作
本人安装方式使用的是 安装方式三,安装方式二尝试了一下,镜像拉不下来
安装方式一:Linux常规安装
了解了mq的基本概念和角色以后,我们开始安装rocketmq,建议在linux上
下载RocketMQ
下载地址:https://rocketmq.apache.org/dowloading/releases/
注意选择版本,这里我们选择4.9.2的版本,后面使用alibaba的其他组件时,版本需要对应
下载地址:
https://archive.apache.org/dist/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip
上传服务器
在root目录下创建文件夹
mkdir rocketmq
将下载后的压缩包上传到阿里云服务器或者虚拟机中去
解压
unzip rocketmq-all-4.9.2-bin-release.zip
如果你的服务器没有unzip命令,则下载安装一个
yum install unzip
解压之后文件目录如下:
- Benchmark:包含一些性能测试的脚本;
- Bin:可执行文件目录;
- Conf:配置文件目录;
- Lib:第三方依赖;
- LICENSE:授权信息;
- NOTICE:版本公告;
配置环境变量
vim /etc/profile
在文件末尾添加
export NAMESRV_ADDR=阿里云公网IP:9876
修改nameServer的运行脚本
进入bin目录下,修改runserver.sh文件,将71行和76行的Xms和Xmx等改小一点
vim runserver.sh
保存退出
修改broker的运行脚本
进入bin目录下,修改runbroker.sh文件,修改67行
保存退出
修改broker的配置文件
进入conf目录下,修改broker.conf文件
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr=localhost:9876
autoCreateTopicEnable=true
brokerIP1=阿里云公网IP
参数解释
- namesrvAddr:nameSrv地址可以写localhost因为nameSrv和broker在一个服务器
- autoCreateTopicEnable:自动创建主题,不然需要手动创建出来
- brokerIP1:broker也需要一个公网ip,如果不指定,那么是阿里云的内网地址,我们在本地无法连接使用
启动
首先在安装目录下创建一个logs文件夹,用于存放日志
mkdir logs
一次运行两条命令
# 启动nameSrv
nohup sh bin/mqnamesrv > ./logs/namesrv.log &
# 启动broker 这里的-c是指定使用的配置文件
nohup sh bin/mqbroker -c conf/broker.conf > ./logs/broker.log &
查看启动结果
RocketMQ控制台(RocketMQ-Console)的安装
Rocketmq 控制台可以可视化MQ的消息发送!
旧版本源码是在rocketmq-external里的rocketmq-console,新版本已经单独拆分成dashboard
网址: https://github.com/apache/rocketmq-dashboard
下载地址:
https://github.com/apache/rocketmq-dashboard/archive/refs/tags/rocketmq-dashboard-1.0.0.zip
下载后解压出来,在跟目录下执行
mvn clean package -Dmaven.test.skip=true
将jar包上传到服务器上去
然后运行
nohup java -jar ./rocketmq-dashboard-1.0.0.jar
rocketmq.config.namesrvAddr=127.0.0.1:9876 > ./rocketmq-4.9.3/logs/dashboard.log &
命令拓展:
--server.port
指定运行的端口--rocketmq.config.namesrvAddr=127.0.0.1:9876
指定namesrv地址
访问:http://localhost:8001
运行访问端口是8001,如果从官网拉下来打包的话,默认端口是8080
安装方式二:Docker安装RocketMQ
这里下载不成功建议移步到下一节,我拉取这里的镜像错误了
下载RockerMQ需要的镜像
docker pull rocketmqinc/rocketmq
docker pull styletang/rocketmq-console-ng
启动NameServer服务
创建NameServer数据存储路径
mkdir -p /home/rocketmq/data/namesrv/logs /home/rocketmq/data/namesrv/store
启动NameServer容器
docker run -d \
--name rmqnamesrv \
-p 9876:9876 \
-v /home/rocketmq/data/namesrv/logs:/root/logs \
-v /home/rocketmq/data/namesrv/store:/root/store \
-e MAX_POSSIBLE_HEAP=100000000 \
rocketmqinc/rocketmq sh mqnamesrv
启动Broker服务
创建Broker数据存储路径
mkdir -p /home/rocketmq/data/broker/logs /home/rocketmq/data/broker/store
创建conf配置文件目录
mkdir /home/rocketmq/conf
在配置文件目录下创建broker.conf配置文件
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址
brokerIP1 = 你服务器外网ip
启动Broker容器
docker run -d --name rmqbroker --link rmqnamesrv:namesrv -p 10911:10911 -p 10909:10909 -v /home/rocketmq/data/broker/logs:/root/logs -v /home/rocketmq/data/broker/store:/root/store -v /home/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf --privileged=true -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
启动控制台
docker run -d --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=你的外网地址:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false \
-Duser.timezone='Asia/Shanghai'" -v /etc/localtime:/etc/localtime -p 9999:8080 styletang/rocketmq-console-ng
正常启动后的docker ps
访问控制台
http://你的服务器外网ip:9999/
安装方式三:官网Docker安装教程
教程链接:https://rocketmq.apache.org/zh/docs/4.x/quickstart/02quickstartWithDocker
5.0版本:https://rocketmq.apache.org/zh/docs/quickStart/02quickstartWithDocker
拉取RocketMQ镜像
docker pull apache/rocketmq:4.9.6
创建容器共享网络
RocketMQ中有多个服务,需要创建多个容器,创建 docker 网络便于容器间相互通信。
docker network create rocketmq
启动NameServer
# 启动NameServer
docker run -d --name rmqnamesrv -p 9876:9876 --net rocketmq apache/rocketmq:4.9.6 sh mqnamesrv
# 验证NameServer是否启动成功
docker logs -f rmqnamesrv
创建broker
# 创建目录
mkdir /home/rocketmq/conf
# 如果上面的命令创建失败,直接加上-p创建多级目录
mkdir -p /home/rocketmq/conf
# 配置 Broker 的 IP 地址(服务器安装建议使用服务器ip),写到配置文件中
echo "brokerIP1=127.0.0.1" >/home/rocketmq/conf/broker.conf
# 启动 4.9.6 版本Broker
docker run -d \
--name rmqbroker \
--net rocketmq \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
-v /home/rocketmq/conf/broker.conf(在服务器的地址,删):/home/rocketmq/conf/broker.conf \
apache/rocketmq:4.9.6 sh mqbroker \
-c /home/rocketmq/conf/broker.conf
# 启动 5.3.0 版本Broker
docker run -d \
--name rmqbroker \
--network rocketmq \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-p 8080:8080 -p 8081:8081 \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
-v /home/rocketmq/conf/broker.conf(在服务器的地址,删):/home/rocketmq/conf/broker.conf \
apache/rocketmq:5.3.0 sh mqbroker --enable-proxy \
-c /home/rocketmq/conf/broker.conf
# 验证 Broker 是否启动成功
docker logs rmqbroker
控制台
控制台按照上面的Docker方式安装即可,不过我安装之后,访问会获取不到数据
最后查看原因,发现是连接到null,我也不知道是什么原因
最后没办法,我只好去把项目(https://github.com/apache/rocketmq-dashboard)拉取下来,在IDEA中启动
本地启动起来之后,可以获取到数据了
也只能先暂且这样学习了,如果有大佬知道原因,麻烦教教我o(╥﹏╥)o
RocketMQ安全
Broker开启权限控制
在broker.conf中添加aclEnable=true
Broker配置账号密码
修改plain_acl.yml
plain_acl.yml内容
可以复制一份副本出来,再进行修改
Dokcer部署怎么改
# 进入容器,找到原本的plain_acl.yml位置
[root@localhost ~]# docker exec -it 2c84 bash
rocketmq@2c8411977723:~/rocketmq-5.3.0/bin$ cd ../
rocketmq@2c8411977723:~/rocketmq-5.3.0$ ls
benchmark bin conf lib LICENSE NOTICE README.md
rocketmq@2c8411977723:~/rocketmq-5.3.0$ cd conf
rocketmq@2c8411977723:~/rocketmq-5.3.0/conf$ ls
2m-2s-async 2m-noslave container dledger rmq.broker.logback.xml rmq.controller.logback.xml rmq-proxy.json rmq.tools.logback.xml
2m-2s-sync broker.conf controller plain_acl.yml rmq.client.logback.xml rmq.namesrv.logback.xml rmq.proxy.logback.xml tools.yml
# 查看路径
rocketmq@2c8411977723:~/rocketmq-5.3.0/conf$ pwd
/home/rocketmq/rocketmq-5.3.0/conf
# 退出容器
rocketmq@2c8411977723:~/rocketmq-5.3.0/conf$ exit;
exit
# 复制容器中的配置文件到本地
[root@localhost ~]# docker cp 2c84:/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml /home/rocketmq/conf/
Successfully copied 3.07kB to /home/rocketmq/conf/
# 将容器中的plain_acl.yml复制到本地中
docker cp 2c84:/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml /home/rocketmq/conf/
删除掉原来的容器(docker rm 容器id/名称),然后使用如下命令重新启动一个容器
docker run -d \
--name rmqbroker5.3 \
--network rocketmq \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-p 8080:8080 -p 8081:8081 \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
-v /home/rocketmq/conf/broker.conf:/home/rocketmq/rocketmq-5.3.0/conf/broker.conf \
-v /home/rocketmq/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml \
apache/rocketmq:5.3.0 sh mqbroker --enable-proxy \
-c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf
控制面板连接broker配置账号密码
修改控制面板的配置文件放开52/53行,把49行改为true,上传到服务器的jar包平级目录下即可
【详细步骤】
将rocketmq-dashboard的jar包解压出来,修改application.properties
设置面板也要登录
再配置面板的账号密码
将配置文件放到jar包的同级目录下,这样jar启动的时候会优先使用平级的配置文件,这样就可以使用账号密码了
springBoot配置文件使用账号密码
# 数据源配置
rocketmq:
# rocketMq的nameServer地址
name-server: 127.0.0.1:9876
producer:
# 生产者组别
group: ips-product-group
# 消息发送的超时时间
send-message-timeout: 10000
# 异步消息发送失败重试次数
retry-times-when-send-async-failed: 2
# 发送消息的最大大小,单位字节,这里等于4M
max-message-size: 4194304
access-key: ddd
secret-key: 12345678
consumer:
access-key: ddd
secret-key: 12345678
其他
发送消息报错
如果后端连接RocketMQ发送消息报错的话org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout
解决:去broker.conf把127.0.0.1换成服务器IP
云服务器开放端口
为了能让开发机连接到服务器的RocketMQ,需要开放如下两个端口
- 9876
- 10912
控制台操作
重置消费点位
:将一个组的消费节点设置在之前的某一个时间点上去,从这个时间点开始往后消费跳过堆积
:选择一个组,跳过堆积以后,这个组里面的的所有都不会被消费了