RocketMq单机和集群搭建教程


1. rocketMQ单机版安装

​ RocketMQ运行版本下载地址: https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip

​ RocketMQ源码版本下载地址: https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmq-all-4.7.1-source-release.zip

        
单机版rocketMQ安装

前提:确保linux已安装jdk,因为rocketMQ依赖java

①:安装jdk(如已安装请忽略)

# 1.解压jdk
tar -zxvf jdk-8u171-linux-x64.tar.gz


# 2.打开环境变量
vi ~/.bash_profile

# 3.配置环境变量
export JAVA_HOME=/app/jdk1.8/
PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export PATH

编辑完成后,执行 source ~/.bash_profile让环境变量生效。

# 3.生效环境变量
source ~/.bash_profile

输入java -version能查看到以下内容表明JDK安装成功了。

[oper@worker1 ~]$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

        

②:安装RocketMQ

rocketrMQ通过ftp上传到linux自定义目录后,需要把rocketmq的bin目录也配置到环境变量中

# 1.打开环境变量
vi ~/.bash_profile

# 2.新增RocketMQ后的环境变量
export JAVA_HOME=/app/jdk1.8/
export ROCKETMQ_HOME=/app/rocketmq/rocketmq-all-4.7.1-bin-release //新增RocketMQ
PATH=$ROCKETMQ_HOME/bin:$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin  //配置进去
export PATH

同样不要忘了生效环境变量

# 3.生效环境变量
source ~/.bash_profile

注意:这个ROCKETMQ_HOME的环境变量是必须要单独配置的,如果不配置的话,启动NameSever和Broker都会报错。

这个环境变量的作用是用来加载 $ROCKETMQ_HOME/conf 下的除broker.conf以外的几个配置文件。所以实际情况中,可以不按这个配置,但是一定要能找到配置文件。

        
③:启动NameServer

        要启动RocketMQ服务,需要先启动NameServer。启动NameServer非常简单, 在$ROCKETMQ_HOME/bin目录下有个mqnamesrv。直接执行这个脚本就可以启动RocketMQ的NameServer服务。

注意:RocketMQ默认预设的JVM内存是4G,这是RocketMQ给我们的最佳配置。但是通常我们用虚拟机的话都是不够4G内存的,所以需要调整下JVM内存大小。修改的方式是直接修改runserver.sh。 用vi runserver.sh编辑这个脚本,在脚本中找到这一行调整内存大小为512M

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -
XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

修改后如下:
在这里插入图片描述
然后我们用静默启动的方式启动NameServer服务:

nohup bin/mqnamesrv & 

启动完成后,在nohup.out里看到这一条关键日志就是启动成功了。并且使用jps指令可以看到有一个NamesrvStartup进程。

Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and
will likely be removed in a future release.
The Name Server boot success. serializeType=JSON

        

④:启动Broker

        启动Broker的脚本是bin目录下的runbroker.sh。Broker的默认预设内存是8G,启动前,如果内存不够,同样需要调整下JVM内存。vi runbroker.sh,找到这一行,进行内存调整,与namserver类似

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

如下所示:
在这里插入图片描述

        然后需要找到$ROCKETMQ_HOME/conf/broker.conf, vi指令进行编辑,在最下面加入一个配置:代表自动创建topic

# 指定nameserverIP地址
brokerIP1 = 47.96.27.22

# 自动创建Topic设置
autoCreateTopicEnable = true

然后也以静默启动的方式启动runbroker.sh

# 需要指定配置文件、nameserver地址,自动创建topic
nnohup sh bin/mqbroker -n 47.96.27.22:9876  -c conf/broker.conf autoCreateTopicEnable=true &

启动完成后,同样是检查nohup.out日志,有这一条关键日志就标识启动成功了。 并且jps指令可以看到一个BrokerStartup进程。

The broker[worker1, 192.168.232.128:10911] boot success. serializeType=JSON

注意:在观察runserver.sh和runbroker.sh时,我们还可以查看到其他的JVM执行参数,这些参数都可以进行定制。例如我们观察到一个比较有意思的地方,nameServer使用的是CMS垃圾回收器,而Broker使用的是G1垃圾回收器

        

⑤:验证

        由于rocketmq是java写的,所以使用 jps 命令如果可以查看到有nameserver、broker进程就说明启动成功
在这里插入图片描述

        另外,在RocketMQ的安装包中,提供了一个tools.sh工具可以用来在命令行快速验证RocketMQ服务。

首先需要配置一个环境变量NAMESRV_ADDR指向我们启动的NameServer服务。

export NAMESRV_ADDR='localhost:9876'	

然后启动消息生产者发送消息脚本:默认会发1000条消息

bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

看到下面的内容代表发送成功!
在这里插入图片描述
然后启动消费者消费消息

bin/tools.sh  org.apache.rocketmq.example.quickstart.Consumer

看到如下打印,代表消费者消费成功
在这里插入图片描述
这个Consume指令并不会结束,他会继续挂起,等待消费其他的消息。我们可以使用CTRL+C停止该进程。

常见问题:

如果出现了MQClientException: No route info for this topic, Topicxxx这类异常,可以在启动broker时使用如下命令启动:

nohup sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true & 

        

⑥:关闭RocketMQ服务

# 1.关闭NameServer
sh bin/mqshutdown namesrv

# 2.关闭Broker
sh bin/mqshutdown broker

至此,roicketMQ单机版安装并测试完成


2. rocketMQ集群方案

        克隆两台虚拟机,模拟集群环境,点此查看克隆教程。同样的,在两台虚拟机上都要安装 jdk 和 rockeMQ,并配置环境变量,此过程跟单机环境一样。为了便于观察,这次搭建一个2主2从异步刷盘的集群,所以我们会使用conf/2m-2s-async下的配置文件,实际项目中,为了达到高可用,一般会使用dleger。这些原始的集群配置文件在RocketMQ安装时已默认生成,我们只需修改配置文件。内部预备设计的集群情况如下:

机器名nemaeServer节点部署broker节点部署
centos7 - 主机nameserver
centos7 - chunjingnameserverbroker-a, broker-b-s
centos7 - clone1nameserverbroker-b,broker-a-s

集群方案解读如下:

  1. centos7 - 主机 只配置nameserver,不配置节点
  2. 两个主节点 broker-a,broker-b 分别落在centos7 - chunjing 和 centos7 - clone1 上
  3. 两个主节点 broker-a-s,broker-b-s 分别落在centos7 - clone1和 centos7 - chunjing 上

配置集群时可以使用RocketMQ安装时已默认生成的文件,进入rocketmq的config目录下可以看到rocketmq建议的各种配置方式:

  1. 2m-2s-async:2主2从异步刷盘(吞吐量较大,但是消息可能丢失),
  2. 2m-2s-sync:2主2从同步刷盘(吞吐量会下降,但是消息更安全),
  3. 2m-noslave:2主无从(单点故障),也可以直接配置broker.conf,进行单点环境配置。
  4. dleger:是用来实现主从切换的。集群中的节点会基于Raft协议随机选举出一个leader,其他的就都是follower。通常正式环境都会采用这种方式来搭建集群。

conf目录结构如下:
在这里插入图片描述
当前我们选择的方案为2主2从异步刷盘: 2m-2s-async,其目录结构如下:
在这里插入图片描述


3. rocketMQ集群搭建

集群方案设计完毕后,接下来进行具体的搭建步骤:

①:安装 jdk ,如上,省略

②:安装RocketMQ ,如上,省略

③:在 centos7 - chunjing 机器上,配置第一组 broker-a主节点

编辑 2m-2s-async/broker-a.properties 文件

broker - a 主节点配置如下:

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.100.100:9876;192.168.100.103:9876;192.168.100.104:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/tuling/rocketMQ/store
#commitLog 存储路径
storePathCommitLog=/tuling/rocketMQ/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/tuling/rocketMQ/store/consumequeue
#消息索引存储路径
storePathIndex=/tuling/rocketMQ/store/index
#checkpoint 文件存储路径
storeCheckpoint=/tuling/rocketMQ/store/checkpoint
#abort 文件存储路径
abortFile=/tuling/rocketMQ/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#这一个参数是表明RocketMQ内部用来发送消息的线程池的线程数量是16个,
#其实这个参数可以根据机器的CPU核心数进行适当调整
#例如如果你的机器核心数超过16个,就可以把这个参数适当调大。
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

④:在 centos7 - clone1 机器上,配置第一组 broker-a-s 从节点

编辑 2m-2s-async/broker-a-s.properties 文件,只需要修改brokerId,brokerRole和listenPort 即可

broker - a - s 配置如下

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.100.100:9876;192.168.100.103:9876;192.168.100.104:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/tuling/rocketMQ/storeSlave
#commitLog 存储路径
storePathCommitLog=/tuling/rocketMQ/storeSlave/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/tuling/rocketMQ/storeSlave/consumequeue
#消息索引存储路径
storePathIndex=/tuling/rocketMQ/storeSlave/index
#checkpoint 文件存储路径
storeCheckpoint=/tuling/rocketMQ/storeSlave/checkpoint
#abort 文件存储路径
abortFile=/tuling/rocketMQ/storeSlave/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128



⑤:在 centos7 - clone1 机器上,配置第一组 broker-b 主节点

编辑 2m-2s-async/broker-b.properties 文件

broker - b 配置如下

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.100.100:9876;192.168.100.103:9876;192.168.100.104:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/tuling/rocketMQ/store
#commitLog 存储路径
storePathCommitLog=/tuling/rocketMQ/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/tuling/rocketMQ/store/consumequeue
#消息索引存储路径
storePathIndex=/tuling/rocketMQ/store/index
#checkpoint 文件存储路径
storeCheckpoint=/tuling/rocketMQ/store/checkpoint
#abort 文件存储路径
abortFile=/tuling/rocketMQ/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

⑥:在 centos7 - chunjing 机器上,配置第一组 broker-b-s 主节点

编辑 2m-2s-async/broker-b-s.properties 文件

broker - b - s 配置如下

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.100.100:9876;192.168.100.103:9876;192.168.100.104:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/tuling/rocketMQ/storeSlave
#commitLog 存储路径
storePathCommitLog=/tuling/rocketMQ/storeSlave/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/tuling/rocketMQ/storeSlave/consumequeue
#消息索引存储路径
storePathIndex=/tuling/rocketMQ/storeSlave/index
#checkpoint 文件存储路径
storeCheckpoint=/tuling/rocketMQ/storeSlave/checkpoint
#abort 文件存储路径
abortFile=/tuling/rocketMQ/storeSlave/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

需要注意的配置项

  1. 同一机器上两个实例的store目录不能相同,否则会报错 Lock failed,MQ already started
  2. 同一机器上两个实例的listenPort也不能相同。否则会报端口占用的错,nameserver不需要进行配置,直接启动就行。这也看出nameserver是无状态的。

        

启动RocketMQ

①:先启动nameServer

如单机版配置一样,修改三个节点上的bin/runserver.sh,调整里面的jvm内存配置。找到下面这一行调整下内存

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

直接在三个节点上启动nameServer。

nohup bin/mqnamesrv &

启动成功标志:进入bin同级目录的 nohub.out 文件中看到如下图,表示启动成功!
在这里插入图片描述
或者使用 jps 查看有nameServer进程即可:
在这里插入图片描述

        
②:再启动broker

        启动broker是使用的mqbroker指令,只是注意启动broker时需要通过-c 指定对应的配置文件。同时也要注意如果linux配置太小,不满足rocketmq的默认内存大小,需要手动进入 bin/runbroker.sh 中修改一下启动参数,否则启动会报错,修改如下
在这里插入图片描述

# 在centos7-chunjing 机器上启动broker-a的master节点和broker-b的slave节点
nohup ./mqbroker -c ../conf/2m-2s-async/broker-a.properties &
nohup ./mqbroker -c ../conf/2m-2s-async/broker-b-s.properties &
# 在centos7-clone1 机器上启动broker-b的master节点和broker-a的slave节点
nohup ./mqbroker -c ../conf/2m-2s-async/broker-b.properties &
nohup ./mqbroker -c ../conf/2m-2s-async/broker-a-s.properties &

注意:启动slave时,如果遇到报错 Lock failed,MQ already started ,那是因为有多个实例共用了同一个storePath造成的,这时就需要调整store的路径。

启动成功标志:进入bin/nobub.out文件中可以看到下图表示成功。
在这里插入图片描述
也可使用jps查看进程确认是否成功!
在这里插入图片描述

命令行快速验证

        指定NameServer地址,可以配置一个环境变量NAMESRV_ADDR,这样默认会读取这个NameServer地址。可以配到.bash_profile里或者直接临时指定。

# 添加环境变量
export NAMESRV_ADDR='worker1:9876;worker2:9876;worker3:9876'

# 生效环境变量
source ~/.bash_profile
# 发送消息:默认会发1000条消息
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
# 接收消息:
bin/tools.sh  org.apache.rocketmq.example.quickstart.Consumer

                
        

4. Dleger搭建rokcetMQ高可用集群

        通过上面那种方式,我们搭建了一个主从结构的RocketMQ集群,但是我们要注意,这种主从结构是只做数据备份,没有容灾功能的。也就是说当一个master节点挂了后,slave节点是无法切换成master节点继续提供服务的。注意这个集群至少要是3台,允许少于一半的节点发生故障。而如果要进行高可用的容灾备份,需要采用Dledger的方式来搭建高可用集群。注意,这个Dledger需要在RocketMQ4.5以后的版本才支持,我们使用的4.7.1版本已经默认集成了dledger。

        要搭建高可用的Broker集群,我们只需要配置conf/dleger下的配置文件就行。这种模式是基于Raft协议的,是一个类似于Zookeeper的paxos协议的选举协议,也是会在集群中随机选举出一个leader,其他的就是follower。只是他选举的过程跟paxos有点不同。Raft协议基于随机休眠机制的,选举过程会比paxos相对慢一点。

首先:我们同样是需要修改runserver.sh和runbroker.sh,对JVM内存进行定制。

然后:我们需要修改conf/dleger下的配置文件。 跟dleger相关的几个配置项如下:

配置项含义配置值
enableDLegerCommitLog是否启动 DLedgertrue
dLegerGroupDLedger Raft Group的名字,建议和 brokerName 保持一致RaftNode00
dLegerPeersDLedger Group 内各节点的端口信息,同一个 Group 内的各个节点配置必须要保证一致n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
dLegerSelfId节点 id, 必须属于 dLegerPeers 中的一个;同 Group 内各个节点要唯一n0
sendMessageThreadPoolNums发送线程个数,建议配置成 Cpu 核数16

conf/dleger目录如下:
在这里插入图片描述

配置完后,同样是使用 nohup bin/mqbroker -c $conf_name & 的方式指定实例文件来启动。

注意:

  1. 在bin/dleger下有个fast-try.sh,这个脚本是在本地启动三个RocketMQ实例,搭建一个高可用的集群,读取的就是conf/dleger下的broker-no.conf,broker-n1.conf和broker-n2.conf。
  2. 使用这个脚本同样要注意定制下JVM内存,他给每个实例默认定制的是1G内存,虚拟机肯定是不够的。
  3. 这种单机三实例的集群搭建完成后,可以使用 bin/mqadmin clusterList -n
    worker1.conf的方式查看集群状态。
  4. 单机状态下一般一次主从切换需要大概10S的时间。

                
        

5. 启动rockerMQ控制台界面

RocketMQ源代码中并没有提供控制台,但是有一个Rocket的社区扩展项目中提供了一个控制台,地址: https://github.com/apache/rocketmq-externals
选择该分支:
在这里插入图片描述

下载下来后,使用idea打开项目

要注意,这个项目的application.properties这个属性的值是空的,需要指定nameserver的地址

rocketmq.config.namesrvAddr=192.168.100.100:9876;192.168.100.103:9876;192.168.100.104:9876

然后package打包,java -jar 命令启动 jar 包

java -jar rocketmq-console-ng-1.0.1.jar

启动完成后,可以访问 http://ip:8080看到管理页面 如下所示:

在这里插入图片描述

                
        

6. rockerMQ控制台如何查看 消息积压,消息是否消费?

        

6.1 查看消息挤压

        假如说生产者发送了10条消息,此时消费者服务没有启动,因此就无法被消费,那么此时的积压的10条消息在哪看呢?点击主题(Topic),找到我们发消息时的Topic,然后点击CONSUMER管理选项

在这里插入图片描述

在这里插入图片描述
此时停掉消费者,让生产者发送10条消息,看下上面的差值会有什么变化
在这里插入图片描述

6.1 查看消息是否被消费

打开消息界面
在这里插入图片描述
选择对应的topic,进行搜索
在这里插入图片描述
然后选择想要查看的消息,点击MESSAGE DETAIL,进入之后往下拉
在这里插入图片描述
通过trackType可以看出是否被消费

  • NOT_ONLINE 有可能已经被消费,然后消费者离线,当然,也有可能是没消费过。它主要表示消费端离线。
  • CONSUMED 代表该消息已经被消费
  • NOT_CONSUME_YET 还没被消费
  • UNKNOW_EXCEPTION 报错
  • CONSUMED_BUT_FILTERED 消费了,但是被过滤了,一般是被tag过滤了

而上图中trackType的值为NOT_ONLINE,说明消费者没有运行,但不确定消费没有消费

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值