一、下载
官方文档以及下载地址:
下载二进制包即可:
rocketmq-all-5.2.0-bin-release.zip
unzip rocketmq-all-5.2.0-bin-release.zip
二、MQ结构
三、部署模式
注意:同一机器部署多节点,需要修改broker端口和数据目录。
1、单机模式
即一个服务,一般是单台机器部署,当服务器宕机时,服务不可用。
1.1、单节点模式
单个broker和proxy,测试环境使用本模式。注意:broker节点故障时,服务不可用。
1.2、多节点模式
多个主broker,配置简单,性能最高,当一个broker宕机时,服务仍可用,消息不丢失。
1.3、主从异步模式
即主从复制模式,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:
- 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;
- 缺点:Master宕机,磁盘损坏情况下会丢失少量消息。
1.4、主从同步模式
即主从同写模式,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:
- 优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
- 缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。
2、集群模式
多个机器部署,组成集群,当某个机器宕机时,其他服务器可用,建议生产环境使用。
例如: 1、配置文件方式写法: namesrvAddr=192.168.0.137:9876;192.168.0.138:9876 2、命令行方式: nohup sh bin/... -n 192.168.0.137:9876;192.168.0.138:9876 -c ... |
四、配置
1、环境变量设置
根据需要设置,如果不设置,后面的启动命令使用绝对路径或相对路径。
# 这里设置到用户级别的环境变量 vi .bash_profile export ROCKETMQ_HOME=/home/software/rocketmq PATH=$PATH:$HOME/bin:$ROCKETMQ_HOME/bin # 生效配置 source .bash_profile # 检查配置是否生效 env |
2、配置解析
broker集群名称,用于划分broker brokerClusterName=MQCluster001 #broker名称,用于主从配对,相同名称的broker才能做主从设置 brokerName=mq_broker_1 #用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。#Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和#Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连 #接Slave角色的Broker来读取消息。Master节点设置 brokerId=0 #Slave节点设置 #brokerId=1 #name server服务器地址及端口,可以是多个,分号隔开,可省略,在启动命令上标识即可 namesrvAddr=192.168.0.13700:9876 #创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数 defaultTopicQueueNums=8 #是否自动创建默认topic,生产需保持关闭 autoCreateTopicEnable=true #是否自动创建topic的订阅组,默认开启 autoCreateSubscriptionGroup=true #broker服务监听端口 listenPort=10911 #未消费的持久化消息清理时间点 deleteWhen=04 #持久化消息保存周期(单位:小时),超过该周期将被清理 fileReservedTime=24 #单个commitLog文件的大小限制(单位:字节) mapedFileSizeCommitLog=1073741824 #单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20) mapedFileSizeConsumeQueue=8000000 #存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求 diskMaxUsedSpaceRatio=88 #持久化消息存储根路径 storePathRootDir=/data/store #commitLog文件存储路径 storePathCommitLog=/data/store/commitlog #最大消息大小限制(单位:字节) maxMessageSize=65536 #commitLog最少刷盘page数 flushCommitLogLeastPages=4 #consumeQueue最少刷盘page数 flushConsumeQueueLeastPages=2 #commitLog刷盘间隔时间 flushCommitLogThoroughInterval=10000 #consumeQueue刷盘间隔时间 flushConsumeQueueThoroughInterval=60000 #处理消息发送线程池大小 sendMessageThreadPoolNums=128 #处理消息拉取线程池大小 pullMessageThreadPoolNums=128 #broker角色(SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:Slave) brokerRole=ASYNC_MASTER #Slave节点设置 #brokerRole=SLAVE #刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘) flushDiskType=ASYNC_FLUSH |
3、修改日志目录
日志文件保存路径按需修改
这里改成环境变量设的地址,按实际情况修改
4、修改JVM参数
修改bin/runserver.sh的JVM参数,按需修改
修改bin/runbroker.sh的JVM参数,按需修改
五、涉及端口
存在安全策略时,放开以下端口
默认端口 | 服务 | 名称 | 备注 | 修改后端口 |
9876 | NameServer | 主服务 | 端口可修改 | 不变 |
10911 | Broker | 主-监听 | 端口可修改 | 不变 |
10912 | Slave | 备-监听 | 端口可修改 | 不变 |
8080 | Dashboard | 管理服务 | 端口需修改 | 9880 |
8081 | grpcServerPort | 代理端口 | 端口需修改 | 9881 |
8080 | remotingListenPort | 代理端口 | 端口需修改 | 9882 |
六、常用命令
1、启动命令
### 首先启动Name Server $ nohup sh $ROCKETMQ_HOME/bin/mqnamesrv > $ROCKETMQ_HOME/outmqnamesrv.log 2>&1 & ### 验证Name Server 是否启动成功 $ tail -f ./logs/rocketmqlogs/namesrv.log The Name Server boot success... |
#测试: nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 --enable-proxy > $ROCKETMQ_HOME/outbroker.log 2>&1 & #单节点启动 nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 --enable-proxy >/dev/null 2>&1 & #双节点启动 nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties --enable-proxy >/dev/null 2>&1 & nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-b.properties --enable-proxy >/dev/null 2>&1 & #双节点同步启动 nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties --enable-proxy >/dev/null 2>&1 & nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties --enable-proxy >/dev/null 2>&1 & nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties --enable-proxy >/dev/null 2>&1 & nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties --enable-proxy >/dev/null 2>&1 & #双节点异步启动 nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties --enable-proxy >/dev/null 2>&1 & nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties --enable-proxy >/dev/null 2>&1 & nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties --enable-proxy >/dev/null 2>&1 & nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties --enable-proxy >/dev/null 2>&1 & #集群启动 暂无集群环境... |
2、停止命令
sh mqshutdown broker sh mqshutdown proxy sh mqshutdown namesrv |
七、Dashboard管理页面
下载代码,编译部署后即可访问,部署前修改对应的端口和地址。
# 编译 mvn clean package -Dmaven.test.skip=true # 启动 java -jar target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar #访问地址,端口按需修改 192.168.0.137:9880 |
八、集成springboot
spring: rocketmq: name-server: ${ROCKETMQ_HOST:192.168.0.193}:9876 # RocketMQ NameServer 地址 producer: group: caibinfen-producer # 生产者组名 consumer: group: caibinfen-consumer # 消费者组名 instance-name: caibinfen-instance # 消费者实例名称 batch-mode: true # 是否开启批量消费,默认false max-retry-times: 3 # 最大重试次数 consume-thread-min: 1 # 消费线程池最小线程数 consume-thread-max: 30 # 消费线程池最大线程数 |
九、常见问题
1、8080端口占用
在proxy.log日志发现问题,8080端口被占用,搜索8080可找到对应的配置文件,在rmq-proxy.json配置文件中进行修改或者自定义文件,顺便把8081端口(搜索)也改掉。
如果是自定义文件,则启动执行时指定文件,例如:nohup bin/mqbroker -n 127.0.0.1:9876
-pc conf/proxyConfig.json --enable-proxy &
十、安全
1、MQ密码设置
在conf/broker.conf中开启aclEnable=true
设置密码,重启name-server和broker
注意如果客户端在白名单范围内,可跳过认证。
Dashboard修改对应的认证配置,打包重启
2、Dashboard登录密码设置
application.yml中参数设置loginRequired: true,打包重启即可;
账号密码设置在users.properties修改。