官方文档https://github.com/apache/rocketmq/tree/master/docs/cn
基本概念
- Message Model
- Producer
- Consumer
- Topic
- Broker Server
- Name Server
- Pull Consumer
- Push Consumer
- Producer Group
- Consumer Group
- Clustering
- Broadcasting
- Nomarl Ordered Message
- Strictly Ordered Message
- Message
- Tag
特性(features)
- 订阅与发布
- 消息顺序
- 消息过滤
- 消息可靠性
- 至少一次
- 回溯消费
- 事务消息
- 定时消息
- 消息重试
- 消息重投
- 流量控制
- 死信队列
整体架构
分为技术架构与部署架构
- 生产者(Producer):负责产生消息,生产者向消息服务器发送由业务应用程序系统生成的消息。
- 消费者(Consumer):负责消费消息,消费者从消息服务器拉取信息并将其输入用户应用程序。
- 消息服务器(Broker):是消息存储中心,主要作用是接收来自 Producer 的消息并存储, Consumer 从这里取得消息。
- 名称服务器(NameServer):用来保存 Broker 相关 Topic 等元信息并给 Producer ,提供 Consumer 查找 Broker 信息。
整体流程
-
1、启动 Namesrv,Namesrv起 来后监听端口,等待 Broker、Producer、Consumer 连上来,相当于一个路由控制中心。
-
2、Broker 启动,跟所有的 Namesrv 保持长连接,定时发送心跳包。
心跳包中,包含当前 Broker 信息(IP+端口等)以及存储所有 Topic 信息。 注册成功后,Namesrv 集群中就有 Topic 跟 Broker 的映射关系。
- 3、收发消息前,先创建 Topic 。创建 Topic 时,需要指定该 Topic 要存储在哪些 Broker上。也可以在发送消息时自动创建Topic。
-
4、Producer 发送消息。
启动时,先跟 Namesrv 集群中的其中一台建立长连接,并从Namesrv 中获取当前发送的 Topic 存在哪些 Broker 上,然后跟对应的 Broker 建立长连接,直接向 Broker 发消息。
-
5、Consumer 消费消息。
Consumer 跟 Producer 类似。跟其中一台 Namesrv 建立长连接,获取当前订阅 Topic 存在哪些 Broker 上,然后直接跟 Broker 建立连接通道,开始消费消息。
简单阅读了基本知识后,下面先部署环境
参考文档 http://rocketmq.apache.org/docs/quick-start/
本次选择binary https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
-----------------
The following softwares are assumed installed:
64bit OS, Linux/Unix/Mac is recommended;(Windows user see guide below)
64bit JDK 1.8+; (这里需要注意32bit 后面Producer报错)
Maven 3.2.x;
Git;
4g+ free disk for Broker server
添加环境变量
ROCKETMQ_HOME=D:\develop\rocketmq\rocketmq-all-4.7.1-bin-release
NAMESRV_ADDR=localhost:9876
--------------------------------------------
由于RocketMQ默认配置要求很高,可能需要修改/bin目录的三个sh或cmd中jvm参数的大小
修改/bin/runserver.cmd runbroker.cmd tools.cmd
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=128m"
broker还有个参数 -XX:MaxDirectMemorySize=1g需要改小
--------------
启动并验证,需要打开四个窗口按顺序执行,可以在文件夹地址栏输入powershell,然后回车快速打开。
.\bin\mqnamesrv.cmd
.\bin\mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
.\bin\tools.cmd org.apache.rocketmq.example.quickstart.Producer
.\bin\tools.cmd org.apache.rocketmq.example.quickstart.Consumer