如果想要了解RocketMQ的历史,则需了解阿里巴巴中间件团队中的历史,2011年,Linkin(领英:全球知名的职场社交平台)推出Kafka消息引擎,阿里巴巴中间件团队在研究了Kafka的整体机制和架构设计之后,基于Kafka(Scala语言编写)的设计使用Java进行了完全重写并推出了MetaQ 1.0版本,主要是用于解决顺序消息和海量堆积的问题,由开源社区killme2008维护。本书重点不在此版本,具体见:https://github.com/killme2008/Metamorphosis
2012年,阿里巴巴发现MetaQ原本基于Kafka的架构在阿里巴巴如此庞大的体系下很难进行水平扩展,于是对MetaQ进行了架构重组升级,开发出了MetaQ 2.0,同年阿里把Meta2.0从阿里内部开源出来,取名RocketMQ,为了命名上的规范以及版本上的延续,对外称为RocketMQ3.0。因为RocketMQ3只是RocketMQ的一个过渡版本,本书重点也不在此。
2016年11月28日,阿里巴巴宣布将开源分布式消息中间件RocketMQ捐赠给Apache,成为Apache 孵化项目。在孵化期间,RocketMQ完成编码规约、分支模型、持续交付、发布规约等方面的产品规范化,同时RocketMQ3也升级为RocketMQ4。现在RocketMQ主要维护的是4.x的版本,也是大家使用得最多的版本,所以本书重点将围绕此版本进行详细的讲解,项目地址:https://github.com/apache/rocketmq/
2015年,阿里基于RocketMQ开发了阿里云上的Aliware MQ,Aliware MQ(Message Queue)是RocketMQ的商业版本,是阿里云商用的专业消息中间件,是企业级互联网架构的核心产品,基于高可用分布式集群技术,搭建了包括发布订阅、消息轨迹、资源统计、定时(延时)、监控报警等一套完整的消息云服务。因为Aliware MQ是商业版本,本书也不对此产品进行讲述,产品地址:https://www.aliyun.com/product/rocketmq
2021年,伴随众多企业全面上云以及云原生的兴起,RocketMQ也在github上发布5.0版本。目前来说还只是一个预览版,不过RocketMQ5的改动非常大,同时也明确了版本定位,RocketMQ 5.0定义为云原生的消息、事件、流的超融合平台。本书也将会根据目前所发布的版本进行针对性的讲述。
RocketMQ可以从官网下载,也可以从Github上获取,推荐从官网中获取
官网:http://rocketmq.apache.org/dowloading/releases/
Github:https://github.com/apache/rocketmq/
本书中将使用4.8.0的版本,从官网上获取的页面如下。
环境要求如下:
下载链接:https://archive.apache.org/dist/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip
解压运行版本(Binary),确保已经安装好了JDK1.8
解压后的目录如下:
变量名:ROCKETMQ_HOME
变量值:MQ解压路径\MQ文件夹名
在RocketMQ的架构中,都是需要先启动NameServer再启动Broker的。所以先启动NameServer。
- 启动NameServer
使用cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqnamesrv.cmd’,启动NameServer。成功后会弹出提示框,此框勿关闭。
- 启动Broker
使用cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true’,启动Broker。成功后会弹出提示框,此框勿关闭。
- 弹出提示框‘错误: 找不到或无法加载主类 xxxxxx’的处理
打开‘MQ文件夹\bin’下的runbroker.cmd,然后将‘%CLASSPATH%’加上英文双引号。保存并重新执行start语句。
再次启动
- 内存不足的处理方式
RocketMQ默认的虚拟机内存较大,启动Broker如果因为内存不足失败,需要编辑如下两个配置文件,修改JVM内存大小。编辑‘MQ文件夹\bin’下的runbroker.cmd和runserver. cmd修改默认JVM大小(Linux上对应同名sh文件)
runbroker.cmd --broker的配置
runserver. cmd --nameServer的配置
例如:配置以下参数将RocketMQ的启动JVM的 堆空间内存控制在512m,新生代控制 在256m。元空间初始128m,最大320m。
- 修改RocketMQ的存储路径
rocketmq取的默认路径是user.home路径,也就是用户的根目录,一般存储放在跟路径下的 /store目录。
源码中可以得到验证,如下图:
所以这里会有一个问题,RocketMQ很容易导致C盘空间不够,在使用过程中,创建一个主题默认就是要创建1G的文件,很可能会导致出问题。
所以在windows上容易导致C盘空间吃满。
解决方式有两种:
运行前确保:已经有jdk1.8,Maven(打包需要安装Maven 3.2.x)
老版本地址下载:https://codeload.github.com/apache/rocketmq-externals/zip/master
新版本地址:https://github.com/apache/rocketmq-dashboard
解压后如图(以下使用的是老版本,新版本参考老版本即可)
后端管理界面是:rocketmq-console
下载完成之后,进入‘\rocketmq-console\src\main\resources’文件夹,打开‘application.properties’进行配置。
进入‘\rocketmq-externals\rocketmq-console’文件夹,执行‘mvn clean package -Dmaven.test.skip=true’,编译生成。
编译成功之后,cmd命令进入‘target’文件夹,执行‘java -jar rocketmq-console-ng-2.0.0.jar’,启动‘rocketmq-console-ng-2.0.0.jar’。
浏览器中输入‘127.0.0.1:8089’,成功后即可进行管理端查看。
- 运维页面
通过Topic和Group查询在线的消息生产者客户端
信息包含客户端主机 版本
- 消息查询页面
64bit OS、64bit JDK 1.8+、4g+ free disk for Broker server
在RocketMQ的架构中,都是需要先启动NameServer再启动Broker的。所以先启动NameServer。
1.RocketMQ需要开通的端口:
RocketMQ默认的虚拟机内存较大,启动Broker如果因为内存不足失败,需要编辑如下两个配置文件,
修改JVM内存大小。(但是这个也仅仅是在测试环境中,RocketMQ在生产上最低要求
至少8G内存<官方推荐>才能确保RocketMQ的效果)
编辑runbroker.sh和runserver.sh修改默认JVM大小(windows上对应cmd文件)
vi runbroker.sh --broker的配置
vi runserver.sh --nameServer的配置
JAVA_OPT="${JAVA_OPT} -server -Xms1024m -Xmx1024m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
因为可视化插件是基于java打包的,所以启动过程和windows上是一样,修改端口号和打包可参考之前控制台插件
执行‘nohup java -jar rocketmq-console-ng-1.0.1.jar &’,启动‘rocketmq-console-ng-1.0.1.jar’。
http://rocketmq.apache.org/dowloading/releases/
导入后执行Maven命令install
mvn install -Dmaven.test.skip=true
验证下没问题
如上图,中Value值是一个Rocket运行主目录(一般这个目录新建)
在Rocket运行主目录中创建conf、logs、store三个文件夹
然后从源码目录中distribution目录下的中将broker.conf、logback_broker.xml、logback_namesrv.xml复制到conf目录中