rocketmq初步使用
文章目录
一、简介
rocketmq是阿里开源的消息队列,突出特点支持消息事务。这里对rocketmq常规概念、安装、使用进行介绍。
二、知识点
2.1 官网文档
http://rocketmq.apache.org/docs/quick-start/
https://github.com/apache/rocketmq/tree/master/docs/cn
2.2 关键词
- NamerServer:topic路由注册中心,用于路由消息,通过名字服务查找对应的broker ip列表。可构成集群,但相互独立,没有信息交换,每一个都有完整的路由信息,broker会向每一台NameServer注册自己的路由信息;
- BrokerServer: 消息中转,负责消息的存储和转发。分为master和slave,master的brokerId为0,可以有多个slave;slave的brokerId为非0,只能对应一个master;
- Producer:消息生产者
- Consumer:消息消费;
- Topic:主题,归纳一类消息;
备注:更多概念请查看https://github.com/apache/rocketmq/blob/master/docs/cn/concept.md
2.3 流程
- 启动NameServer,即是路由注册中心;
- 启动borker,与NamerServer建立长连接,通过心跳向NameServer注册Borker与Topic的映射关系;
- 创建Topic,指定Topic存储在哪些Broker上;
- 发送消息,Producer与NameServer建立长连接,从NameServer中获取Topic在哪些Borker上,然后与Broker建立连接,在Broker中选择队列发送消息;
- 消息消息,Consumer与NameServer建立长连接,从NameServer中获取Topic在哪些Borker上,然后与Broker建立连接,在Broker中选择队列消费消息;
备注:架构请参考https://github.com/apache/rocketmq/blob/master/docs/cn/architecture.md
三、安装
3.1 rocketmq安装
这里以安装 2主0从 为例,安装流程如下:
-
设置JAVA_HOME环境变量;
-
下载rocketmq安装包:
wget https://mirrors.bfsu.edu.cn/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
-
解压及进入安装包:
unzip rocketmq-all-4.7.1-bin-release.zip cd rocketmq-all-4.7.1-bin-release
-
修改conf/2m-noslave目录下的broker-a.properties和broker-b.properties文件,分别在两文件添加内容(用于在同一台机器上启动rocketmq)。
broker-a.properties文件添加:#重新指定storePath路径 storePathRootDir = storePath/broker-a #重新指定broker端口 listenPort = 10921
broker-b.properties文件添加:
#重新指定storePath路径 storePathRootDir = storePath/broker-b #重新指定broker端口 listenPort = 10925
-
启动NameService,端口默认为9876:
bin/mqnamesrv
-
启动2master,无slave模式:
bin/mqbroker -n localhost:9876 -c conf/2m-noslave/broker-a.properties bin/mqbroker -n localhost:9876 -c conf/2m-noslave/broker-b.properties
备注:
启动单master,默认端口是10911,如下:bin/mqbroker -n localhost:9876
另外还有:
- 多master多slave同步双写,主备都写成功了才返回成功,服务可用性和数据可用性高
- 多master多slave异步复制,主备有短暂延迟(毫秒级)
-
关闭
bin/mqshutdown broke bin/mqshutdown namesrv
3.2 可视化工具rocketmq-console安装
-
下载rocketmq-console
git clone https://github.com/apache/rocketmq-externals
-
修改rocketmq-console项目下的application.properties文件
rocketmq.config.namesrvAddr=localhost:9876
-
启动rocketmq-console项目
-
浏览器查看:http://localhost:8080
四、常用命令
常用命令请参考https://github.com/apache/rocketmq/blob/master/docs/cn/operation.md,下面列出部分。
命令格式为:
bin/mqadmin command -n localhost:9876
4.1 topic相关
command命令有:
updateTopic:创建或更新Topic
-h:打印帮助
-n:NameService服务地址,格式为 ip:port
-b:Broker服务地址,格式为 ip:port
-t:topic名称
-r:可读队列数,默认为8
-w:可写队列数,默认为8
-c:集群名称
其它还有:
- deleteTopic:删除Topic
- topicList:查看Topic列表
- topicStatus:查看Topic消息队列offset
- topicRoute:查看Topic路由信息
示例如下:
#创建
bin/mqadmin updateTopic -n localhost:9876 -b localhost:10921 -t topicOne
#查看topic列表
bin/mqadmin topicList -n localhost:9876
#查看消息offset
bin/mqadmin topicStatus -n localhost:9876 -t topicOne
#查看路由
bin/mqadmin topicRoute -n localhost:9876 -t topicOne
4.2 消息相关
sendMessage:发送消息
-h 打印帮助
-n NameServer 服务地址,格式 ip:port
-t topic名称
-p body,消息体
-k keys
-c tags
-b BrokerName
-i queueId
其它还有consumeMessage(消费消息)等。
使用示例如下:
#发送消息
bin/mqadmin sendMessage -n localhost:9876 -t topicOne -b broker-a -p "msg one"
五、java示例
这里介绍java中的简单示例。
5.1 添加maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>