目录
一、预备环境
系统:Windows
环境:JDK1.8、Maven、Git
二、RocketMQ 基本组成
RocketMQ(https://rocketmq.apache.org/docs/quick-start/)是阿里巴巴团队使用java语言开发的一款分布式消息中间件,是一款低延迟,高可用,拥有海量消息堆积能力和灵活拓展性的消息队列,经受了双11的严峻挑战。
RocketMQ由四大核心模块组成:
- producer(生产者)
- consumer(消费者)
- brokerServer
- nameServer
其中brokerServer和nameServer是rocketmq的服务端,两者一起独立的对外提供服务;而producer和consumer可看做是rocketmq的客户端,一般依附于业务应用程序。
2.1 Producer(生产者)
producer负责发送消息。使用producer将消息发送到brokerServer
,消费者将从brokerServer中获取消息
。
RocketMQ支持多种消息发送方式,如同步消息发送、异步回调消息发送、顺序消息发送、延迟消息、单向消息发送(异步无回调)。除了单向消息发送
,其余的发送方式均需要brokerServer
返回发送结果的确认消息。特别的,RocketMQ支持发送事务消息(半消息),能一定程度上解决分布式事务
的问题。
2.2 Consumer(消费者)
consumer 负责消费producer发送的消息。consumer会从brokerServer
获取消息,并传递给应用程序。
RocketMQ使用的消息原语是At Least Once(至少一次成功消费),如果一定时间内没有接收到consumer消息确认消费的响应结果,会将同一条消息再次投递给consumer
。RocketMQ采用ack机制
保证消息的消费成功,所以consumer可能会多次收到同一条消息,需要consumer的业务方做好幂等防护。
从使用者的角度来看,consumer分为两种方式来获取信息
。一种是推模式(push consume),推模式看起来像是brokerServer将消息推给了consumer;另一种是拉模式(pull consume),拉模式看起来像是consumer主动的去brokerServer拉取消息(实际上,推模式是基于拉模式实现的)。
2.3 BrokerServer
BrokerServer负责消息的接收,存储和分发,是rocketmq最核心,最重量级的组成部分。
为实现高可用和高吞吐,brokerServer通常采用集群部署,共同对外提供服务。
Broker分主节点(master)和从节点(slave),主节点主要是面向生产者一般用于写操作,从节点主要是面向消费者用于读操作。
一个主节点可以有多个从节点
,Broker是通过name来分组的,每组中又通过id来区分主从的,id为0表示主节点,非0表示从节点。
2.4 NameServer
NameServer负责提供路由元数据
。例如,brokerServer通常是集群部署的,其拓扑结构会经常的发生变化。如果每次集群中broker机器的上下线都需要通知所有的消费者、生产者,效率太低。
因此,rocketmq引入了nameServer作为brokerServer路由信息的维护者,broker的每次上下线都和nameServer通信,由nameServer来维护broker的路由信息,而producer和consumer通过访问nameServer获得对应broker的访问地址后,再向对应的broker发起请求。
nameServer解除了broker和客户端的耦合依赖关系,大大提高了效率
。nameServer同样能以集群形式对外提供服务,集群内的nameServer服务器并不会互相通信,而是保持相互独立。
如果将BrokerServer看做是一个微服务,那么NameServer就是注册中心,生产者发送消息需要从NameServer获取一个可用的BrokerServer,然后再往该BrokerServer中发送消息。
三、RocketMQ基本概念模型
3.1 Topic(主题)
Topic表示主题的意思,用于表示一类消息的分类名称或者说是一类消息对应的分类编码,生产者在发送消息时都必须指定一个Topic(分类),消费者通过指定分类来表示要具体消费那种消息。Topic就是消息的分类。
3.2 Tag(标签)
如果说Topic用分类来表示,一般分类可能还会有具体的子类或者称为二级分类,那么Tag就是Topic的二级分类,或者理解为二级Topic。Tag用于对消息再次进行具体细致的分类。
3.3 Message(消息)
message消息是rocketmq中传递消息的主体,一般是个JSON字符串,生产者会将该JSON字符串发送到BrokerServer中,消费者会通过BrokerServer获取该JSON字符串来处理业务逻辑。
3.4 Message Queue(消息队列)
消息队列是消息的家,用来存储消息的地方。每个Topic默认都会分配4个Message Queue用于存储该Topic下的Message。
3.5 Group(组)
组分为 消费者组(consumer group)和 生产者组(producer group)两种。消费者组和生产者组之间没有任何关联(即使组名一样)。只需要为生产者或者消费者定义一个组名即可,组名相同的就是一个集群。
一般一个微服务定义一个生产者组名即可,每个微服务的消费者可以定义自己的消费者组名。
3.6 集群(Clustering)消费/广播(Broadcasting)消费
集群消费和广播消费是消费的两种方式:
集群消费:同一消费者组下的所有消费者共同瓜分消息,一个消息只能被一个消费者消费。
广播消费:同一消费者组下的所有消费者都能消费到每一条消息,人人有份,不用抢,就像村里的大喇叭一样,广播一响所有人都能听得见。
四、RocketMQ下载安装(单机安装)
4.1 下载
官方下载地址: http://rocketmq.apache.org/dowloading/releases/
点击进入如下页面,点击 HTTP链接进行下载:
4.2 解压安装
将上面下载的解答到 没有中文、空格 的 目录下:
4.3 配置环境变量
新增环境变量:
变量名:ROCKETMQ_HOME
变量值:RocketMQ安装目录(笔者这里是D:\rocketmq-4.9.3)
针对Path环境变量追加路径 %ROCKETMQ_HOME%\bin 如果非window10需要在前面加上分号;
主要目的是是的可以在任意目录下执行启动RocketMQ
4.4 配置RocketMQ
4.4.1 bin/runserver.cmd配置
修改启动配置文件runserver:(原来【占内存太大】)
set “JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”
修改成:
set “JAVA_OPT=%JAVA_OPT% -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”
4.4.2 bin/runbroker.cmd配置
set “JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g”
修改成:
set “JAVA_OPT=%JAVA_OPT% -server -Xms512m -Xmx512m”
4.4.3 conf/broker.conf配置
添加:autoCreateTopicEnable = true
4.5 启动RocketMQ
在windows下打开命令行 执行 mqnamesrv.cmd 若不配置path路径,则每次启动需要定位到目录 D:\rocketmq-4.9.3\bin下去执行 mqnamesrv.cmd
4.5.1 启动NameServer
打开cmd,输入 命令 mqnamesrv.cmd,回车
4.5.2 启动broker
在文件夹地址栏输入cmd打开新的控制台,输入
start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
会新打开一个窗口:
出现上图所示窗口,标识启动成功啦。
注意:不要关闭 NameServer、Broker 这2个窗口(那个空cmd窗口可关闭),关闭服务就停掉了!
最后需要保留此两个服务打开:
五、RocketMQ可视化控制台
5.1 下载控制台
下载rocketmq-console(现在的 rocketmq-dashboard) https://github.com/apache/rocketmq-externals/ ,这是一个Spring Boot Web项目 。
进入https://github.com/apache/rocketmq-externals,下拉找到RocketMQ Dashboard,点击进去下载 客户端:
5.2 启动控制台
启动rocketmq-dashboard,可以在IDEA中直接启动,也可以先打包成jar,然后再使用 java -jar 启动。启动之前可以修改application.properties中的一些参数。
server.port=8080
注意:如果nameserver有多个有分号;分割而不是逗号
rocketmq.config.namesrvAddr=localhost:9876
打包方式:
mvn clean package -Dmaven.test.skip=true
运行jar包:
java -jar rocketmq-dashboard-master-0.0.1-SNAPSHOT.jar
控制台界面如下:
参考文章:
消息队列之–RocketMQ Window10安装及Console UI编译和部署
RocketMQ入门教程(一):简介与安装