rocketMQ实践

📅 2026/7/6 21:46:07
rocketMQ实践
rocketMQ实践1 单机测试1.1 单机安装1.2 启动与关闭1.3 发送/接收消息测试2、rocketmq控制台管理程序2.1、下载说明2.2、修改配置2.3、打包与运行测试2.4、控制台官方替代方案3、RocketMQ的常见概念4、双主双从异步复制测试4.1、服务器规划4.2、基本配置4.2.1、hadoop103服务器4.2.2、hadoop104服务器4.3、启动NameServer集群4.4、启动两个Master4.5、启动两个Slave4.6、其它相关配置5、常用命令说明主页: https://rocketmq.apache.org/docs/quick-start/.下载: https://archive.apache.org/dist/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip.1 单机测试1.1 单机安装unziprocketmq-all-4.8.0-bin-release.zipmvrocketmq-all-4.8.0-bin-release rocketmqmvrocketmq /opt/module/cd/opt/module/rocketmq#调整默认的内存大小参数vimbin/runserver.shJAVA_OPT${JAVA_OPT}-server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize128m -XX:MaxMetaspaceSize320m#调整默认的内存大小参数vimbin/runbroker.shJAVA_OPT${JAVA_OPT}-server -Xms256m -Xmx256m -Xmn128m1.2 启动与关闭1、启动nameserver-n 指定nameserver地址和端口nohupshbin/mqnamesrv-nlocalhost:9876/dev/null21tail-f~/logs/rocketmqlogs/namesrv.log2、启动broker-n 指定nameserver地址和端口nohupshbin/mqbroker-nlocalhost:9876autoCreateTopicEnabletrue/dev/null21或 在conf/broker.conf 中 加入brokerIP1你的IPnohupshbin/mqbroker-n192.168.168.101:9876-cconf/broker.confautoCreateTopicEnabletrue/dev/null21tail-f~/logs/rocketmqlogs/broker.log3、关闭 rocketmq broker服务shbin/mqshutdown broker4、关闭 rocketmq namesrv服务shbin/mqshutdown namesrv启动没有异常检查nameserver中是否成功注册了broker:第一种方法查看broker的日志tail-n10~/logs/rocketmqlogs/broker.log第二种方法mqadminshmqadmin clusterList-n192.168.168.101:98761.3 发送/接收消息测试发送消息exportNAMESRV_ADDRlocalhost:9876shbin/tools.sh org.apache.rocketmq.example.quickstart.Producer 接收消息shbin/tools.sh org.apache.rocketmq.example.quickstart.Consumer2、rocketmq控制台管理程序2.1、下载说明第三方软件链接下载: rocketmq-externals-rocketmq-console-1.0.0.zip2.2、修改配置在pom.xml中添加如下配置dependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.0/version/dependencydependencygroupIdcom.sun.xml.bind/groupIdartifactIdjaxb-impl/artifactIdversion2.3.0/version/dependencydependencygroupIdcom.sun.xml.bind/groupIdartifactIdjaxb-core/artifactIdversion2.3.0/version/dependencydependencygroupIdjavax.activation/groupIdartifactIdactivation/artifactIdversion1.1.1/version/dependency2.3、打包与运行测试# 本地运行mvn spring-boot:run# 打包mvn clean package-Dmaven.test.skiptrue# 打包后可执行jar包运行java-jartarget/rocketmq-console-ng-1.0.0.jarnohupjava-jarrocketmq-console-ng-1.0.1.jar/dev/null21访问控制台192.168.168.168:80802.4、控制台官方替代方案官方替代方案Apache RocketMQ Dashboard。现在 Apache 官方推出原生控制台rocketmq-dashboard推荐优先使用要求JDK8完美适配 RocketMQ4.x/5.x长期维护比第三方 console-ng 更稳定。# 下载dashboard jarJDK8即可wgethttps://archive.apache.org/dist/rocketmq/4.9.5/rocketmq-dashboard-1.0.0.jarjava-jarrocketmq-dashboard-1.0.0.jar--rocketmq.namesrv.addr127.0.0.1:98763、RocketMQ的常见概念NameServer集群架构中的组织协调员收集broker的工作情况不负责消息的处理。Broker是RocketMQ的核心负责消息的发送、接收、高可用等需要定时发送自身情况到NameServer默认10秒发送一次超时2分钟会认为该broker失效。Producer消息生产者负责产生消息一般由业务系统负责产生消息。Producer Group一类 Producer 的集合名称这类 Producer 通常发送一类消息且发送逻辑一致。Consumer消息费者负责消费消息一般是后台系统负责异步消费。Push Consumer服务端向消费者端推送消息。Pull Consumer消费者端向服务定时拉取消息。Consumer Group一类 Consumer 的集合名称这类 Consumer 通常消费一类消息且消费逻辑一致。Topic不同类型的消息以不同的Topic名称进行区分如User、Order等是逻辑概念。Message Queue消息队列用于存储消息。4、双主双从异步复制测试4.1、服务器规划主机名/IP服务部署broker角色及端口分配hadoop103 / 192.168.6.103NameServer BrokerMaster1 Slave2hadoop104 / 192.168.6.104NameServer BrokerMaster2 Slave14.2、基本配置4.2.1、hadoop103服务器vim broker-a.properties# 指定整个broker集群的名称或者说是RocketMQ集群的名称brokerClusterNameDefaultCluster# 指定master-slave集群的名称。一个RocketMQ集群可以包含多个master-slave集群brokerNamebroker-a# master的brokerId为0brokerId0# 指定删除消息存储过期文件的时间为凌晨4点deleteWhen04# 指定未发生更新的消息存储文件的保留时长为48小时48小时后过期将会被删除fileReservedTime48# 指定当前broker为异步复制masterbrokerRoleASYNC_MASTER# 指定刷盘策略为异步刷盘flushDiskTypeASYNC_FLUSH# 指定Name Server的地址namesrvAddrhadoop103:9876;hadoop104:9876vim broker-b-s.propertiesbrokerClusterNameDefaultCluster# 指定这是另外一个master-slave集群brokerNamebroker-b# slave的brokerId为非0brokerId1deleteWhen04fileReservedTime48# 指定当前broker为slavebrokerRoleSLAVEflushDiskTypeASYNC_FLUSHnamesrvAddrhadoop103:9876;hadoop104:9876# 指定Broker对外提供服务的端口即Broker与producer与consumer通信的端口。默认10911。# 由于当前主机同时充当着master1与slave2而前面的master1使用的是默认端口。# 这里需要将这两个端口加以区分以区分出master1与slave2listenPort11911# 指定消息存储相关的路径。默认路径为~/store目录。由于当前主机同时充当着master1与slave2角色。# master1使用的是默认路径这里就需要给slave指定一个不同路径storePathRootDir~/store-sstorePathCommitLog~/store-s/commitlogstorePathConsumeQueue~/store-s/consumequeuestorePathIndex~/store-s/indexstoreCheckpoint~/store-s/checkpointabortFile~/store-s/abort4.2.2、hadoop104服务器vim broker-b.properties# 指定整个broker集群的名称或者说是RocketMQ集群的名称brokerClusterNameDefaultCluster# 指定master-slave集群的名称。一个RocketMQ集群可以包含多个master-slave集群brokerNamebroker-b# master的brokerId为0brokerId0# 指定删除消息存储过期文件的时间为凌晨4点deleteWhen04# 指定未发生更新的消息存储文件的保留时长为48小时48小时后过期将会被删除fileReservedTime48# 指定当前broker为异步复制masterbrokerRoleASYNC_MASTER# 指定刷盘策略为异步刷盘flushDiskTypeASYNC_FLUSH# 指定Name Server的地址namesrvAddrhadoop103:9876;hadoop104:9876vim broker-a-s.propertiesbrokerClusterNameDefaultCluster# 指定这是另外一个master-slave集群brokerNamebroker-a# slave的brokerId为非0brokerId1deleteWhen04fileReservedTime48# 指定当前broker为slavebrokerRoleSLAVEflushDiskTypeASYNC_FLUSHnamesrvAddrhadoop103:9876;hadoop104:9876# 指定Broker对外提供服务的端口即Broker与producer与consumer通信的端口。默认10911。# 由于当前主机同时充当着master1与slave2而前面的master1使用的是默认端口。# 这里需要将这两个端口加以区分以区分出master1与slave2listenPort11911# 指定消息存储相关的路径。默认路径为~/store目录。由于当前主机同时充当着master1与slave2角色。# master1使用的是默认路径这里就需要给slave指定一个不同路径storePathRootDir~/store-sstorePathCommitLog~/store-s/commitlogstorePathConsumeQueue~/store-s/consumequeuestorePathIndex~/store-s/indexstoreCheckpoint~/store-s/checkpointabortFile~/store-s/abort4.3、启动NameServer集群# hadoop103nohupshbin/mqnamesrvtail-f~/logs/rocketmqlogs/namesrv.log# hadoop104nohupshbin/mqnamesrvtail-f~/logs/rocketmqlogs/namesrv.log4.4、启动两个Master# hadoop103nohupshbin/mqbroker-cconf/2m-2s-async/broker-a.propertiestail-f~/logs/rocketmqlogs/broker.log# hadoop104nohupshbin/mqbroker-cconf/2m-2s-async/broker-b.propertiestail-f~/logs/rocketmqlogs/broker.log4.5、启动两个Slave# hadoop103nohupshbin/mqbroker-cconf/2m-2s-async/broker-b-s.propertiestail-f~/logs/rocketmqlogs/broker.log# hadoop104nohupshbin/mqbroker-cconf/2m-2s-async/broker-a-s.propertiestail-f~/logs/rocketmqlogs/broker.log4.6、其它相关配置除了以上配置外这些配置文件中还可以设置其它属性。#指定整个broker集群的名称或者说是RocketMQ集群的名称brokerClusterNamerocket-MS#指定master-slave集群的名称。一个RocketMQ集群可以包含多个master-slave集群brokerNamebroker-a#0 表示 Master0 表示 SlavebrokerId0#nameServer地址分号分割namesrvAddrnameserver1:9876;nameserver2:9876#默认为新建Topic所创建的队列数defaultTopicQueueNums4#是否允许 Broker 自动创建Topic建议生产环境中关闭autoCreateTopicEnabletrue#是否允许 Broker 自动创建订阅组建议生产环境中关闭autoCreateSubscriptionGrouptrue#Broker对外提供服务的端口即Broker与producer与consumer通信的端口listenPort10911#HA高可用监听端口即Master与Slave间通信的端口默认值为listenPort1haListenPort10912#指定删除消息存储过期文件的时间为凌晨4点deleteWhen04#指定未发生更新的消息存储文件的保留时长为48小时48小时后过期将会被删除fileReservedTime48#指定commitLog目录中每个文件的大小默认1GmapedFileSizeCommitLog1073741824#指定ConsumeQueue的每个Topic的每个Queue文件中可以存放的消息数量默认30w条mapedFileSizeConsumeQueue300000#在清除过期文件时如果该文件被其他线程所占用引用数大于0比如读取消息此时会阻止此次删除任务同时在第一次试图删除该文件时记录当前时间戳。该属性则表示从第一次拒绝删除 后开始计时该文件最多可以保留的时长。在此时间内若引用数仍不为0则删除仍会被拒绝。不过 时间到后文件将被强制删除destroyMapedFileIntervalForcibly120000#指定commitlog、consumequeue所在磁盘分区的最大使用率超过该值则需立即清除过期文件diskMaxUsedSpaceRatio88#指定store目录的路径默认在当前用户主目录中storePathRootDir/usr/local/rocketmq-all-4.5.0/store#commitLog目录路径storePathCommitLog/usr/local/rocketmq-all-4.5.0/store/commitlog#consumeueue目录路径storePathConsumeQueue/usr/local/rocketmq-all-4.5.0/store/consumequeue#index目录路径storePathIndex/usr/local/rocketmq-all-4.5.0/store/index#checkpoint文件路径storeCheckpoint/usr/local/rocketmq-all-4.5.0/store/checkpoint#abort文件路径abortFile/usr/local/rocketmq-all-4.5.0/store/abort#指定消息的最大大小maxMessageSize65536#Broker的角色# - ASYNC_MASTER 异步复制Master# - SYNC_MASTER 同步双写Master# - SLAVEbrokerRoleSYNC_MASTER#刷盘策略# - ASYNC_FLUSH 异步刷盘# - SYNC_FLUSH 同步刷盘flushDiskTypeSYNC_FLUSH#发消息线程池数量sendMessageThreadPoolNums128#拉消息线程池数量pullMessageThreadPoolNums128#强制指定本机IP需要根据每台机器进行修改。官方介绍可为空系统默认自动识别但多网卡时IP地址可能读取错误brokerIP1192.168.3.1055、常用命令说明./mqnamesrv--helpJava HotSpot(TM)64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removedina future release Java HotSpot(TM)64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removedina future release. Java HotSpot(TM)64-Bit Server VM warning: MaxNewSize(131072k)is equal to or greater than the entire heap(131072k). A new max generation size of 131008k will be used. usage: mqnamesrv[-carg][-h][-narg][-p]-c,--configFileargName server config propertiesfile-h,--help Printhelp-n,--namesrvAddrargName server address list, eg:192.168.0.1:9876;192.168.0.2:9876 -p,--printConfigItem Print all config item./mqbroker--helpusage: mqbroker[-carg][-h][-m][-narg][-p]-c,--configFileargBroker config propertiesfile-h,--help Printhelp-m,--printImportantConfig Print important config item -n,--namesrvAddrargName server address list, eg:192.168.0.1:9876;192.168.0.2:9876 -p,--printConfigItem Print all config item