《RocketMQ实战与原理解析》学习笔记

单机版

rocketMQ 安装&命令

下载安装

> wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-source-release.zip
> unzip rocketmq-all-4.4.0-source-release.zip
> mvn -Prelease-all -DskipTests clean install -U
> cd distribution/target/apache-rocketmq

启动Name Server

> nohup sh bin/mqnamesrv &
 > tail -f ~/logs/rocketmqlogs/namesrv.log
 The Name Server boot success...

启动Broker

> nohup sh bin/mqbroker -n localhost:9876 &
  > tail -f ~/logs/rocketmqlogs/broker.log 
  The broker[%s, 172.30.30.233:10911] boot success...

发送/接收消息(命令行)

### 生产消息
> export NAMESRV_ADDR=localhost:9876
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

接收消息(命令行)

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

关闭服务命令

> sh bin/mqshutdown broker

> sh bin/mqshutdown namesrv

生产环境(集群)

master.conf

### broker-b-master.conf
namesrvAddr=s157:9876;s158:9876

brokerClusterName = DefaultCluster

### brokerName要注意不同
brokerName = broker-b

### 一个 Master Barker 可以有多个 Slave, 0 表示 Master ,大于 0 表示不同Slave 的 ID 。
brokerId = 0

### 与 fileReservedTim巳 参数呼应,表明在几点做消息删除动作,默认值 04 表示凌晨 4 点 。
deleteWhen = 04

### 在磁盘上保存消息的时长,单位是小时,自动删除超时的消息 。
fileReservedTime = 48

### master角色分为ASYNC_MASTER,SYNC_MASTER
### 关键词 SYNC 和 ASYNC 表示 Master 和 Slave 之间同步消息的机制, 
### SYNC 的意思是当 Slave 和 Master 消息同步完成后,再返回发送成功的状态 。
brokerRole = ASYNC_MASTER

### flushDiskType 表示刷 盘策略,分为 SYNC_FLUSH 和 ASYNC_FLUSH 两种,分别代表同步刷盘和异步刷盘 。 
### 同步刷盘情况下,消息真正写人磁盘后再返回成功状态;
### 异步刷盘情况下,消息写人 page_cache 后就返回成功状态 。
flushDiskType = ASYNC_FLUSH

listenPort=10911
storePathRootDir=/home/rocket/store-b-master

### 不配置,会找到docker的地址
### 当前broker监听的IP
brokerIP1=s158

### 存在broker主从时,在broker主节点上配置了brokerIP2的话,broker从节点会连接主节点配置的brokerIP2来同步。
brokerIP2=s158

broker-slave.conf

### broker-b-slave.conf
namesrvAddr=s157:9876;s158:9876

brokerClusterName = DefaultCluster
brokerName = broker-b
brokerId = 1
deleteWhen = 04
fileReservedTime = 48
brokerRole = SLAVE
flushDiskType = ASYNC_FLUSH

listenPort=11011
storePathRootDir=/home/rocket/store-b-slave

指定conf文件,启动broker

nohup sh . /bin/mqbroker -c config_file &


管理命令

topic

创建/修改Topic

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息

:> sh bin/mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t topic1

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息_02

删除 Topic

rocketmq 指定JAVA_HOME rocketmq命令行_Server_03


:sh bin/mqadmin deleteTopic -c DefaultCluster -n localhost:9876 -t topic1

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息_04

更新 Topic 的读写权限

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息_05

查询 Topic 的路由信息

Topic的路由信息指的是某个Topic所在的Broker相关信息,

客户端可以通过NameServer来获取这些信息,本命令一般在调试的时候使用,指令是TopicRoute

rocketmq 指定JAVA_HOME rocketmq命令行_Server_06


:sh bin/mqadmin topicRoute -n localhost:9876 -t topic1

rocketmq 指定JAVA_HOME rocketmq命令行_Server_07


查看 Topic 列表信息

rocketmq 指定JAVA_HOME rocketmq命令行_apache_08


:sh bin/mqadmin topicList -n localhost:9876

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息_09


查看 Topic 统计信息

在使用 RocketMQ 的时候,经常需要查看某个 Top ic 的状态,看看消息的

数量,有多少未处理等,此时可以通过指令 topicStats来查询

rocketmq 指定JAVA_HOME rocketmq命令行_Server_10


sh bin/mqadmin topicStatus -n localhost:9876 -t topic1

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息_11

订阅组

创建/修改订阅组
订阅组可以被自动创建,使用这个命令一般是用来修改订阅组

rocketmq 指定JAVA_HOME rocketmq命令行_apache_12

删除订阅组

rocketmq 指定JAVA_HOME rocketmq命令行_Server_13

更新 Broker 配置

Broker有很多的配置信息,在Broker启动时,可以通过配置文件来指定配置信息。有些配置信息支持在Broker运行的时候动态更改,更改指令是updateBrokerConfig

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息_14

消息相关

根据时间查询消息

一条消息被发送到RocketMQ后,默认会带上发送的时间戳,所以我们可以根据估计的时间来查询消息,指令是printMsg

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息_15


sh bin/mqadmin printMsg -n localhost:9876 -t topic1

rocketmq 指定JAVA_HOME rocketmq命令行_Server_16


根据消息 ID 查询消息

根据消息ID可以精确定位到某条消息,但是消息ID需要通过其他方式来获取,

比如可以先用时间来查询出一些消息,然后定位到要找的具体某个消息,指令是queryMsgByld

rocketmq 指定JAVA_HOME rocketmq命令行_apache_17


:sh bin/mqadmin queryMsgById -n localhost:9876 -i C0A8819D00002A9F000000000000421E

rocketmq 指定JAVA_HOME rocketmq命令行_apache_18

根据路径查看内容:

rocketmq 指定JAVA_HOME rocketmq命令行_apache_19

集群状态

查看集群消息

指令clusterList用来列出集群的状态,看看有哪些Broker在提供服务

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息_20


:sh bin/mqadmin clusterList -n localhost:9876

rocketmq 指定JAVA_HOME rocketmq命令行_Server_21

界面化工具

rocketmq-console

#### 下载源码
https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console

### 打包部署
> mvn clean package -Dmaven.test.skip=true
> nohup java -jar target/rocketmq-console-ng-1.0.1.jar --server.port=8888   --rocketmq.config.namesrvAddr=localhost:9876 &

rocketmq 指定JAVA_HOME rocketmq命令行_配置信息_22