RocketMQ(一)安装

官网文档:http://rocketmq.apache.org/docs/quick-start/

一、下载

官网下载地址 : http://rocketmq.apache.org/dowloading/releases/

依赖版本如图

image-20210401164106937

下载可执行文件版本(红框中的),下载上传到服务器上。

image-20210401163949204

二、系统要求

  • 64位操作系统,生产环境建议Linux/Unix/MacOS(Windows操作系统安装说明详见 Windows操作系统安装教程
  • 64位JDK 1.8(目前RocketMQ不支持 JDK 11)
  • 4G+的可用磁盘

三、Linux/Unix/MacOS安装教

3.1 搭建

解压

1
unzip rocketmq-all-4.5.1-bin-release.zip

切换到RocketMQ跟目录

1
cd rocketmq-all-4.5.1-bin-release

启动Name Server

1
2
3
# 后台启动
nohup sh bin/mqnamesrv &
# bin/mqnamesrv

验证是否启动OK

1
2
3
4
tail -f ~/logs/rocketmqlogs/namesrv.log

# 如果成功启动,能看到类似如下的日志:
2019-07-18 17:03:56 INFO main - The Name Server boot success. ...

启动 Broker

1
2
3
4
5
6
7
8
nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log
The broker[%s, 172.30.30.233:10911] boot success...
# 这样启动
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &

# 指定配置文件
bin/mqbroker -n localhost:9876 --enable-proxy -c conf/broker.conf

这里启动 Broker 会出现异常因为默认的 runbroker的jvm参数如下

JAVA_OPT=”${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g”

默认的设置了8g内存 !!!!!

修改小点就可以了。

JAVA_OPT=”${JAVA_OPT} -server -Xms128m -Xmx256m -Xmn256m”

关闭

1
2
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv

如果公网无法访问可以在配置文件新增配置,新增完配置文件如下。

1
2
3
4
5
6
7
8
9
10
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 新增下面两项配置
brokerIP1=182.61.xxx.xxx
autoCreateTopicEnable=true

3.2 验证RocketMQ功能是否正常

在发送/接收消息之前,我们需要告诉客户端名称服务器的位置。RocketMQ提供了多种方法来实现这一目标。为了简单起见,我们使用环境变量NAMESRV_ADDR

1
2
3
4
5
6
> export NAMESRV_ADDR=localhost:9876
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...

> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...

四、windows安装

五、docker 安装

参考博客地址: 使用docker安装RocketMQ-CSDN博客

拉取镜像

1
docker pull rocketmqinc/rocketmq

创建数据目录

1
mkdir -p  /home/rocketmq/data/namesrv/logs   /home/rocketmq/data/namesrv/store

构建nameserver容器

1
2
3
4
5
6
7
8
9
docker run -d \
--restart=always \
--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

参数说明

参数 说明
-d 以守护进程的方式启动
-restart=always docker重启时候容器自动重启
-name rmqnamesrv 把容器的名字设置为rmqnamesrv
-p 9876:9876 把容器内的端口9876挂载到宿主机9876上面
-v /home/rocketmq/data/namesrv/logs:/root/logs 把容器内的/root/logs日志目录挂载到宿主机的 /docker/rocketmq/data/namesrv/logs目录
-v /home/rocketmq/data/namesrv/store:/root/store 把容器内的/root/store数据存储目录挂载到宿主机的 /docker/rocketmq/data/namesrv目录
rmqnamesrv 容器的名字
-e “MAX_POSSIBLE_HEAP=100000000” 设置容器的最大堆内存为100000000
rocketmqinc/rocketmq 使用的镜像名称
sh mqnamesrv 启动namesrv服务

创建broker节点

创建数据目录

1
mkdir -p  /home/rocketmq/data/broker/logs   /home/rocketmq/data/broker/store /home/rocketmq/conf

创建配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vi /docker/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 = 192.168.52.136
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95

构建broker容器

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run -d  \
--restart=always \
--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 \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq \
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

创建dockermq-console服务

拉取镜像

1
docker pull pangliang/rocketmq-console-ng

启动容器

1
2
3
4
5
6
7
docker run -d \
--restart=always \
--name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.52.136:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 9999:8080 \
pangliang/rocketmq-console-ng
参数 说明
-d 以守护进程的方式启动
-restart=always docker重启时候镜像自动重启
-name rmqadmin 把容器的名字设置为rmqadmin
-e “JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.52.136:9876 设置namesrv服务的ip地址
-Dcom.rocketmq.sendMessageWithVIPChannel=false” 不使用vip通道发送消息
–p 9999:8080 把容器内的端口8080挂载到宿主机上的9999端口