RocketMQ是阿里巴巴开源的一个消息中间件,在阿里内部历经了双十一等很多高并发场景的考验,能够处理亿万级别的消息。2016年开源后捐赠给Apache,现在是Apache的一个顶级项目。
目前RocketMQ在阿里云上有一个购买即可用的商业版本,商业版本集成了阿里内部一些更深层次的功能及运维定制。
RocketMQ的官网地址: http://rocketmq.apache.org
Github地址是https://github.com/apache/rocketmq
RabbitMQ消息队列的主要组件:
NameServer:负责记录各个Broker的信息,类似于微服务中的注册中心。
Broker:消息队列,具体存储消息数据。
在部署RabbitMQ时需要先启动NameServer然后再启动Broker。
如下图集群模式所示:NameServer有多个节点组成高可用集群,记录Broker的路由信息,生产者会从NameServer中找到要存储的Broker信息,消费者也会从NameServer找到要读取的Broker信息,NameServer每个节点都会记录Brokerer的相关信息,Broker是存储消息数据的队列。
1.解压jdk二进制文件
[root@localhost ~]# tar xf jdk1.8.tar.gz -C /usr/local/
2.配置环境变量
[root@localhost ~]# vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8.0_131
PATH=$JAVA_HOME/bin:$PATH
[root@localhost ~]# source /etc/profile
3.查看java的版本
[root@localhost ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
RockerMQ采用二进制方式安装。
1.下载RockerMQ
[root@localhost ~]# wget https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip
2.加压RockerMQ二进制包
[root@localhost ~]# unzip rocketmq-all-4.9.3-bin-release.zip -d /data/
[root@rocketmq ~]# mv /data/rocketmq-4.9.3/ /data/rocketmq
[root@rocketmq ~]# ll /data/rocketmq
总用量 40
drwxr-xr-x. 2 root root 126 2月 22 01:25 benchmark
drwxr-xr-x. 3 root root 4096 2月 22 00:25 bin
drwxr-xr-x. 7 root root 201 2月 22 00:25 conf
drwxr-xr-x. 2 root root 4096 2月 22 01:25 lib
-rw-r--r--. 1 root root 17327 2月 22 00:25 LICENSE
-rw-r--r--. 1 root root 1338 2月 22 00:25 NOTICE
-rw-r--r--. 1 root root 6069 2月 22 00:25 README.md
RockerMQ默认给NameServer和Broker服务分配的JVM太高,我们需要进行调整。
1.修改broker服务的jvm内存
[root@rocketmq ~]# vim /data/rocketmq/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m"
#85行
2.修改NameServer的jvm内存
[root@rocketmq ~]# vim /data/rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
#72行和76行
RockerMQ日志默认存储路径为用户家目录下的logs,我们将它调整为RockerMQ安装目录下logs。
配置文件多出都写了日志的存储路径,我们都需要修改。
[root@rocketmq rocketmq]# vim conf/logback_namesrv.xml
%s#${user.home}#/data/rocketmq#g
[root@rocketmq rocketmq]# vim conf/logback_tools.xml
%s#${user.home}#/data/rocketmq#g
[root@rocketmq rocketmq]# vim conf/logback_broker.xml
%s#${user.home}#/data/rocketmq#g
1.启动NameServer服务
[root@rocketmq rocketmq]# nohup /data/rocketmq/bin/mqnamesrv &
2.查看启动日志
#在上一步中配置了日志存储路径,启动服务后悔发现在安装路径多了个logs目录,以后日志就会存在这里
[root@rocketmq rocketmq]# ll
总用量 44
drwxr-xr-x. 2 root root 126 2月 22 01:25 benchmark
drwxr-xr-x. 3 root root 4096 3月 12 17:36 bin
drwxr-xr-x. 7 root root 201 3月 12 17:46 conf
drwxr-xr-x. 2 root root 4096 2月 22 01:25 lib
-rw-r--r--. 1 root root 17327 2月 22 00:25 LICENSE
drwxr-xr-x. 3 root root 26 3月 12 17:48 logs
-rw-------. 1 root root 652 3月 12 17:48 nohup.out
-rw-r--r--. 1 root root 1338 2月 22 00:25 NOTICE
-rw-r--r--. 1 root root 6069 2月 22 00:25 README.md
[root@rocketmq rocketmq]# tail -f logs/rocketmqlogs/namesrv.log
停止NameServer服务的方法
[root@rocketmq rocketmq]# /data/rocketmq/bin/mqshutdown namesrv
1.启动Broker服务
[root@rocketmq rocketmq]# nohup /data/rocketmq/bin/mqbroker -n localhost:9876 &
#-n参数是制定NameServer
2.查看产生的日志
[root@rocketmq rocketmq]# ls /data/rocketmq/logs/rocketmqlogs/
broker_default.log commercial.log lock.log namesrv.log remoting.log storeerror.log transaction.log
broker.log filter.log namesrv_default.log protection.log stats.log store.log watermark.log
1.查看进程
[root@rocketmq rocketmq]# ps aux | grep mq
root 64516 0.0 0.0 113176 232 pts/0 S 17:48 0:00 /bin/sh /data/rocketmq/bin/mqnamesrv
root 64520 0.0 0.0 113176 228 pts/0 S 17:48 0:00 sh /data/rocketmq/bin/runserver.sh org.apache.rocketmq.namesrv.NamesrvStartup
root 64535 0.4 11.1 2408140 110684 pts/0 Sl 17:48 0:03 /bin/java -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m -XX:-OmitStackTraceInFastThrow -XX:-UseLargePages -cp .:/data/rocketmq/bin/../conf:/data/rocketmq/bin/../lib/*: org.apache.rocketmq.namesrv.NamesrvStartup
root 64624 0.0 0.0 113176 232 pts/0 S 17:52 0:00 /bin/sh /data/rocketmq/bin/mqbroker -n localhost:9876
root 64628 0.0 0.0 113176 256 pts/0 S 17:52 0:00 sh /data/rocketmq/bin/runbroker.sh org.apache.rocketmq.broker.BrokerStartup -n localhost:9876
root 64647 4.7 36.8 2465832 367068 pts/0 Sl 17:52 0:18 /bin/java -server -Xms256m -Xmx256m -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPreTouch -XX:MaxDirectMemorySize=15g -XX:-UseLargePages -XX:-UseBiasedLocking -cp .:/data/rocketmq/bin/../conf:/data/rocketmq/bin/../lib/*: org.apache.rocketmq.broker.BrokerStartup -n localhost:9876
2.查看端口
[root@rocketmq rocketmq]# netstat -lnpt | grep java
tcp6 0 0 :::9876 :::* LISTEN 64535/java
tcp6 0 0 :::10909 :::* LISTEN 64647/java
tcp6 0 0 :::10911 :::* LISTEN 64647/java
tcp6 0 0 :::10912 :::* LISTEN 64647/java
1.设置NameServer地址的环境变量,demo中会用到
[root@rocketmq ~]# export NAMESRV_ADDR=localhost:9876
2.使用自带的tools demo发生消息
[root@rocketmq ~]# /data/rocketmq/bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
1.设置NameServer地址的环境变量,demo中会用到
[root@rocketmq ~]# export NAMESRV_ADDR=localhost:9876
2.使用自带的tools demo发生消息
[root@rocketmq ~]# /data/rocketmq/bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
生产者发送消息,消费者消费消息数据。
当生产者发送完消息后,终端会退出,而消费者启动后,消费完数据也不会退出终端,而是等待生产者再次发生消息数据。
生产者再次产生数据