在新搭建的PAAS系统中,需要引入一下MQ,经过技术选型以后,决定使用RocketMq,因为他是使用JAVA编写的,是阿里开源的顶级Apache项目,出了问题可以自己进行排查,而且一旦不符合我们的需求,可以自己手动定制开发。后来让我去研究一下RocketMq,并引入到我们的PAAS系统中。
引入第三方应用,首先需要搭建一下环境,跑一下demo。那么使用RocketMq需要安装什么应用呢?
首先来简单介绍一下RocketMq,RocketMq由四部分构成,producer,consumer,broker,nameserver。类比对应于邮局系统的,发信者,收信者,负责暂存、传输的邮局,负责协各个地方邮局的管理系统。多个nameserver之间互不通信,每个broker与所有的nameserver都通信,提交状态。
所以除了produce与consumer,我们就需要安装一下broker跟nameserver的应用程序。
应用程序下载地址:http://mirrors.shu.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip
安装与启动(以下对于单机来说):
1.启动 nameserver
nohup sh bin/mqnamesrv &
如果日志文件里出现Name Server boot success....则表示启动成功
2.启动broker。
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties &
如果日志出现 boot success...则表示启动成功。
上述命令是指定broker配置文件启动
broker的配置如下:
namesrvAddr为nameserve地址,可以为多个,目前我们配置一台,如果多个就以逗号分隔,比如:192.168.102.10:9876,192.168.102.11:9876
brokerName表示当前broker的名称
brokerId为0的表示相同brokerName下,这个broker为master
brokerRole为SYNC_MASTER表示是master,SLAVE表示是slave
flushDiskType表示刷盘方式,ASYNC_FLUSH即可,表示异步刷盘。
当listenPort不指定时,默认为10911,如果同一台机器需要配置多个broker,需要指定端口,否则会冲突。
storePathRootDir为指定broker的文件目录,否则会默认在$HOME\store下建立文件,我们需要指定位置
storePathCommitLog为commitlog的日志地址
4个日志文件的配置文件需要修改下打日志的地址,打到指定目录
上述nameServer跟broker启动完毕之后,就可以启动producer跟consumer来跑下demo。
在此之前可以先了解一下RocketMq的运维工具rocketmq-console。
从github上下载源码:https://github.com/apache/rocketmq-externals
找到配置文件application.properties,并按照自己需求进行配置。
例如:
rocketmq.config.namesrvAddr=namesrv服务地址(ip1:port;ip2:port)
在rocketmq-console目录执行命令:
mvn clean package -DskipTests
然后在target目录下找到文件rocketmq-console-ng-1.0.0.jar
启动rocketmq-console,执行命令:
java -jar rocketmq-console-ng-1.0.0.jar --server.port=8090
效果如下:
创建名为TopicTest的topic : sh bin/mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t TopicTest
具体各个参数的含义可以参考https://blog.csdn.net/zhu_tianwei/article/details/40951301
RocketMq的源码中,在以下目录有他写好的demo,可以修改一下里面的参数,先跑producer,再跑consumer。同时看控制台,看看能不能跑通。