【RocketMQ】RocketMQ安装

🎯 导读:该文档记录了在Linux环境下使用Apache RocketMQ的安装与配置流程,包括下载RocketMQ压缩包、上传至服务器并解压、配置环境变量及对nameServer和broker的运行脚本和配置文件进行调整。文档还提供了使用Docker安装部署的方法,以及启动nameServer和broker容器的具体命令。此外,文档涉及了RocketMQ控制台的安装步骤,并对在使用过程中遇到的问题给出了相应的解决方案,如通过修改配置启用安全性和账号密码验证。

本人安装方式使用的是 安装方式三,安装方式二尝试了一下,镜像拉不下来

安装方式一: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),写到配置文件中
touch broker.conf

broker.conf的内容设置如下:

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 服务器ip

启动broker

# 启动 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

消息体长度太大

报错:org.apache.rocketmq.client.exception.MQBrokerException: CODE: 13 DESC: the message is illegal, maybe msg body or properties length not matched. msg body length limit 4194304B, msg properties length limit 32KB. BROKER: 124.222.43.217:10911
For more information, please visit the url, https://rocketmq.apache.org/docs/bestPractice/06FAQ

通过查看broker的配置,发现最大消息尺寸为 4194304B

在这里插入图片描述
在这里插入图片描述

重新设置,在broker.conf上配置maxMessageSize=更大值,设置完成之后重启rocketmq,设置生效

在这里插入图片描述
踩坑:这个值不能设置太大,设置太大,延时消息会出问题。但本人实测99999999是可以的

控制台操作

  • 重置消费点位:将一个组的消费节点设置在之前的某一个时间点上去,从这个时间点开始往后消费
  • 跳过堆积:选择一个组,跳过堆积以后,这个组里面的的所有都不会被消费了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello Dam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值