文章目录
消息中间件概述
功能
- 应用解耦
- 流量削峰
- 消息分发
RocketMQ 简介
- 阿里出品,2016开源
- Java 实现
- 高吞吐,2017 年的双十一,峰值TPS 达到5600 万
快速安装使用
下载
- 官方提供编译好的Binary版本与源码版本可以下载。详见 官网地址
- 要求
- Windows 也可以简单使用
64bit OS, Linux/Unix/Mac is recommended;
64bit JDK 1.8+;
Maven 3.2.x;
Git;
4g+ free disk for Broker server
安装
- 解压
unzip rocketmq-all-4.2.0-bin-release.zip -d ./rocketmq-4.2.0
- 简单分析
LICENSE NOTICE README.md benchmark/ bin/ conf/ lib/
LICENSE 、NOTICE 和 README.md
包括一些版权声明和功能说明信息;benchmark
里包括运行benchmark 程序的shell 脚本;bin
文件夹里含有各种使
用RocketMQ 的shell 脚本( Linux 平台)和cmd 脚本( Windows 平台),比如
常用的启动NameServer 的脚本mqnamesrv ,启动Broker 的脚本mqbroker , 集
群管理脚本mqadmin 等;conf
文件夹里有一些示例配置文件,包括三种方式的
broker 配置文件、logback 日志配置文件等lib
文件夹里包括RocketMQ
各个模块编译成的jar 包,以及RocketMQ 依赖的一些jar 包,比如Netty 、
FastJSON 等
简单使用
- 启动消息队列服务
- 启动NameServer:
# 启动nameserver
nohup sh bin/mqnamesrv &
tail - f ~/Logs /rocketmqLogs/namesrv.Log
The Name Server boot success . ..
- 启动Broker :
nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/Logs/rocketmqLogs/broker.Log
The broker[%s, 192.168.0.233:10911] boot success .. .
- 用命令行发送和接收消息
# 发送消息
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND OK, msgid= ....
# 接收信息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages:[MessageExt . ..
- 关闭消息队列
# 关闭NameServer 和Broker:
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv
集群安装
RocketMQ 角色
-
Producer、Consumer、Broker 和 NameServer。启动RocketMQ 的顺序是先启动NameServer ,再启动Broker ,这时候消
息队列已经可以提供服务了,想发送消息就使用Producer 来发送,想接收消息
就使用Consumer 来接收。 -
角色关系:为了消除单点故障,增加可靠性或增大吞吐量,可以在多台机器上部署多
个NameServer 和Broker ,为每个Broker 部署一个或多个Slave
-
Topic 和 Message Queue。
- Topic 是存放消息的容器,不同类型的消息,以不同的Topic 名称来
区分。所以发送和接收消息前,先创建Topic , 针对某个Topic 发送和接收消
息 - 如果一个Topic 要发送和接收的
数据量非常大, 需要能支持增加并行处理的机器来提高处理速度,这时候一
个Topic 可以根据需求设置一个或多个Message Queue, Message Queue 类似
分区或Partition
多机集群配置与部署(双主双从无单点)
修改NameServer、Broker实例 JVM 内存配置【可选】
- 主要看机器的配置,如果启动报内存问题,就需要修改。
- 修改启动命令
/bin/runserver.sh
、/bin/runbroker.sh
配置,修改JVM 内存。 - 默认配置,在这基础上自己改成自己机器可以承受的即可
# /bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# /bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
启动多个NameServer
- 两台物理机
10.0.64.106
10.0.64.107
- 两台机器上分别启动 NameServer
- 无单点的NameServer 服务
- 服务地址为
10.0.64.106:9876;10.0.64.107:9876
nohup sh bin/mqnamesrv &
配置双主双从
- 概述
- 每台机器上都要分别启动一个Master 角色的Broker 和
一个Slave 角色的Broker ,并互为主备 - 可以基于RocketMQ 自带的示例配置
文件(示例配置文件在 conf/2m-2s-sync 目录下)。
- 配置
10.0.64.106
机器上的Master Broker 的配置
# broker-a.properties
namesrvAddr=10.0.64.106:9876;10.0.64.107:9876
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10911
storePathRootDir=/data/soft/install/rocketmq-all-4.3.2/data/store-a
10.0.64.107
机器上的Master Broker 的配置
# broker-b.properties
namesrvAddr=10.0.64.106:9876;10.0.64.107:9876
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10911
storePathRootDir=/data/soft/install/rocketmq-all-4.3.2/data/store-b
10.0.64.106
机器上的Slave Broker 的配置(是 10.0.64.107 上Master 的 Slave)
# broker-b-s.properties
namesrvAddr=10.0.64.106:9876;10.0.64.107:9876
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=11011
storePathRootDir=/data/soft/install/rocketmq-all-4.3.2/data/store-b
10.0.64.107
机器上的Slave Broker 的配置(是 10.0.64.106 上Master 的 Slave)
# broker-a-s.properties
namesrvAddr=10.0.64.106:9876;10.0.64.107:9876
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=11011
storePathRootDir=/data/soft/install/rocketmq-all-4.3.2/data/store-a
- 启动
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties &
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties &
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties &
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties &
Web 管理平台(rocketmq - console)
-
在github 下载源码,rocketmq - console 地址
-
修改下源码配置
- 配置 NameServer 的地址
- 不配置可以在启动的时候指定或者启动后的页面维护
$yourpath/rocketmq-console/src/main/resources/application.properties
rocketmq.config.namesrvAddr=10.0.64.106:9876;10.0.64.107:9876
- Maven 编译打包
- 直接运行
mvn spring-boot:run
- 编译打包
# 编译打包
mvn clean package -Dmaven.test.skip=true
# 运行
nohup java -jar rocketmq-console-ng-1.0.0.jar &
# 指定 NameServer 运行
nohup java -jar rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr=10.0.64.106:9876;10.0.64.107:9876 &
- 访问,如部署在
10.0.64.106:8080