01. RocketMQ编译安装
介绍
RocketMQ是阿里推出的,现在是Apacha顶级项目。它有两个优势:
- 它服务在阿里内部体系里面,比方说用在淘宝里面,支撑了双十一,它的性能是极高的
- RocketMQ相比其它中间件,因为它是用Java开发的,所以它对Java程序员来说更加友好
其它中间件介绍
中间件名称 | 所用语言 | 是否支持JMS | 优势 |
---|---|---|---|
RocketMQ | Java | 不支持 | 阿里广泛使用,原生面向集群 |
ActiveMQ | Java | 支持 | 结构简单,小项目第一选择 |
Kafka | Scala | 未知 | 性能高 |
RabbitMQ | Erlang | 未知 | 性能高 |
主流的MQ有很多,比如ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等。
之前阿里巴巴也是使用ActiveMQ,随着业务发展,ActiveMQ IO 模块出现瓶颈,后来阿里巴巴 通过一系列优化但是还是不能很好的解决,之后阿里巴巴把注意力放到了主流消息中间件kafka上面,但是kafka并不能满足他们的要求,尤其是低延迟和高可靠性。
所以RocketMQ是站在巨人的肩膀上(kafka)MetaQ的内核,又对其进行了优化让其更满足互联网公司的特点。它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。 RocketMQ目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。
下载RocketMQ
各个版本的JDK需求说明
通过官网进行下载
下面是当前官网的rocketmq下载地址
将下载好的zip放到linux服务器上面,然后进行解压
通过Github下载源码并编译
将源码放到服务器上面,使用tar xvf rocketmq-rocketmq-all-4.9.2.tar.gz
将源码进行解压。
编译之前先要确保本地服务器上面有maven软件,没有的话请自行百度进行安装,后续我再出相关的教程。
进入到解压后的目录,然后使用mvn -Prelease-all -DskipTests clean install -U
进行编译。这里说明一下这个命令的含义,-Prelease-all
代表选择的profile是release-all
,-DskipTests
代表跳过测试步骤,-U
代表强制刷新本地仓库不存在release版和所有的snapshots版本(其实我也不懂是什么意思,我看这篇博客是这么解释的)
耐心等待源码编译完毕
进入distribution/target
目录,将rocketmq-4.9.2
移出来,这个目录里面就是我们需要的rocketmq的应用
运行rocketmq
rocketmq目录说明
进入到bin目录下面,最主要的是两个程序:mqbroker
和mqnamesrv
切换JDK版本
因为rocketmq对JDK版本有要求,如果忘记了JDK的安装路径,可以通过命令java -verbose
来查询java的安装路径,这个命令最后就会显示出java的安装路径
想要切换JDK版本就是把/etc/profile
下面的JAVA_HOME和PATH修改掉,然后用source /etc/profile
使配置生效
对于CentOS进行安装的JDK,好像有alternatives方式来切换java版本,具体只能自行百度了
启动namesrv
编辑一下runserver.sh
,搜索一下-Xms
找到内存大小,把内存改小一点。如果不改的话执行后面的命令可能会报错内存不够
运行当前目录下面的./mqnamesrv
,然后就能把这个程序启动起来了
这里说明一下,namesvr你可以把它想象成zookeeper、eureka、nacos,它就是一个注册中心,后面所有的broker(也就是实际干活的进程)都注册到它上面
启动broker
再开启一个窗口,编辑一下runbroker.sh
,搜索一下-Xms
找到内存大小,把内存改小一点。如果不改的话,默认启动要分配8G内存,几乎所有的机器都会报错内存不够
运行当前目录下面的./mqbroker -n localhost:9876
,然后把broker启动起来,并让broker连接到namesvr上面。后面的-n localhost:9876
必须制定,如果不指定,后面运行生产者脚本的时候会报错No route info of this topic: TopicTest
这里有可能会报错Failed to obtain the host name
,配置一下/etc/hosts
,将自己服务器的IP地址和机器名映射好
broker你可以想象成一个实际干活的人,它里面维护了很多个主题topic,每个主题topic也就是一个消息队列
运行生产者脚本
再开启一个窗口,修改一下tools.sh
,在最后一句话前面增加export NAMESRV_ADDR=localhost:9876
这句话如果不加的话,执行后面的语句会报错connect to null failed
运行生产者脚本:./tools.sh org.apache.rocketmq.example.quickstart.Producer
运行消费者脚本
使用命令./tools.sh org.apache.rocketmq.example.quickstart.Consumer
,就能把刚才生产的内容都消费掉
rocketmq-dashboard
rocketmq也有一个图形化的客户端,原来它是rocketmq-externals下面的一个子模块,现在单独成为了一个顶级项目,叫做rocketmq-dashboard,下载源码,进入目录,使用命令mvn clean package -Dmaven.test.skip=true
进行编译
编译完毕之后,进入target目录,运行java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar
访问IP:8080
打开控制台,刚打开的时候会发现一堆报错信息,没关系,切换到OPS选项卡,在NameServerAddressList下面输入IP:9876
,然后按回车,再按UPDATE按钮,将NameServerAddress配置上去
如果不想很麻烦,每次启动的时候都配置NameServerAddress,可以运行cp ../src/main/resources/application.properties .
,将application.properties
文件拷贝到jar包所在的target目录,然后编辑这个application.properties
文件,搜索rocketmq.config.namesrvAddr
,将NameSrv地址配置上去,保存完毕文件,重启应用。
或者也可以使用java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar --rocketmq.config.namesrvAddr=IP:9876
来启动应用
下面是RocketMQ-Dashboard里面各个项目的说明
项目 | 说明 |
---|---|
OPS | 配置NameServer地址 |
Dashboard | 控制台,可以看到前十的Broker,Broker五分钟的趋势,前十的Topic,Topic五分钟的趋势 |
Cluster | 集群 |
Topic | 主题,主题包括:普通、重试、死信、系统 |
Consumer | 消费者 |
Producer | 生产者 |
Message | 消息 |
DLQMessage | 死信消息 |
MessageTrace | 消息轨迹 |