前言
RocketMq是当前用的比较广泛的一款消息队列中间件,核心组件有NameServer、Broker、Producer、Consumer 本篇简单记录下RocketMq的安装
一、下载路径
二、文件上传并压缩
RocketMq5.0以上版本变化较大,这里还是研究下4.x版本
解压后文件目录结构也是比较清晰
创建RocketMq存储相关目录
mkdir -p /data/rocketmq/store /data/rocketmq/store/commitlog /data/rocketmq/store/consumequeue /data/rocketmq/store/index
三、启动Namesrv
后台启动Namesrv ,Namesrv主要维护topic的路由信息,集群中的Namesrv相互独立,不互相通信,启动三台机器上的Namesrv
nohup sh mqnamesrv > /data/rocketmq/nameserver.log 2>&1 &
四、启动Broker
Broker存储消息数据,接收来自Producer、Consumer的请求,有多种部署模式,在解压后的文件Conf目录给出了对应不同模式的配置文件
这里搭建一个两主两备异步刷盘集群(只有三台机器也是可以的。。。)
主 | 备 |
192.168.0.117 | 192.168.0.118 |
192.168.0.119 |
下面给出各机器的broker.conf配置信息
192.168.0.117
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumeQueue=/data/rocketmq/store/consumequeue
brokerIP1=192.168.0.117
namesrvAddr=host117:9876;host118:9876;host119:9876
192.168.0.118(brokeId为1代表备份节点)
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumeQueue=/data/rocketmq/store/consumequeue
namesrvAddr=host117:9876;host118:9876;host119:9876
brokerIP1=192.168.0.118
192.168.0.119
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumeQueue=/data/rocketmq/store/consumequeue
brokerIP1=192.168.0.119
namesrvAddr=host117:9876;host118:9876;host119:9876
进入bin目录启动broker
nohup sh mqbroker -n host117:9876,host118:9876,host119:9876 -c ../conf/broker.conf autoCreateTopicEnable=true > /data/rocketmq/broker.log 2>&1 &
我这边环境上的JDK是11版本的,在启动Broker时碰到点问题
这个跟高版本jdk对待反射的策略有关,在 runbroker.sh 加一行配置就解决问题了
JAVA_OPT="${JAVA_OPT} --add-exports java.base/jdk.internal.ref=ALL-UNNAMED"
broker启动成功后的效果是这样的
执行命令查看NameSrv上的集群
sh mqadmin clusterList -n 192.168.0.117:9876
查看另外两台机器Namesrv上注册的broker信息,可以看到跟117机器上的信息是一样的,也就是NameSrv上保存了全量信息
RocketMq命令官方文档,前面有用到部分RocketMq命令,这些自然是要看官方文档了,具体看这里RocketMq官方文档
五、命令行测试生产者、消费者
RocketMq给我们提供了些Demo,让我们来通过命令感受下,
生产消息,进入RocketMq bin目录,执行命令
tools.sh org.apache.rocketmq.example.quickstart.Producer
执行后发现有报错
加下环境变量
命令执行成功,现在执行消费命令
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
六、rocketmq-dashboard 操作
命令行能实现rocketMq的管理维护但是不够直观,有一个可视化管理界面项目,rocketmq-dashboard项目源码
这种可视化界面就很直观
七、rocketmq源码
RocketMq在使用层面主要就是消息的生产、消费 但是底层逻辑,消息存储逻辑比较复杂,我们可以通过研究源码深入了解下
-
Idea配置Producer