# BootRocketMQ **Repository Path**: songjianghu/boot-rocket-mq ## Basic Information - **Project Name**: BootRocketMQ - **Description**: SpringBoot整合RocketMQ - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-11-06 - **Last Updated**: 2022-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringBoot整合RocketMQ ## 安装RocketMQ - 必要操作: - 关闭防火墙:systemctl stop firewalld.service - 禁用防火墙开机启动:systemctl disable firewalld.service - 前提:JDK8+,需要配置JAVA_HOME环境变量 ``` # 获取安装包 wget -c https://dlcdn.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip # 解压 unzip rocketmq-all-4.9.2-bin-release.zip # 重命名 mv rocketmq-4.9.2 rocketmq # 进入到rocketmq根目录 cd rocketmq ``` - 修改runserver,配置JVM内存大小 ``` vi bin/runserver.sh JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" ``` - 修改runbroker.sh,配置JVM内存大小 ``` vi bin/runbroker.sh JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m" ``` - 启动 Name Server ``` > nohup sh bin/mqnamesrv & > tail -f nohup.out ``` - 修改配置文件 修改conf/broker.conf文件,新增一行: ``` # IP就是本机的IP地址 brokerIP1=192.168.0.106 ``` - 启动 Broker ``` # 带配置文件启动 > nohup sh bin/mqbroker -n 192.168.0.106:9876 -c conf/broker.conf & > tail -f nohup.out ``` - Shutdown Servers ``` > sh bin/mqshutdown broker The mqbroker(36695) is running... Send shutdown request to mqbroker(36695) OK > sh bin/mqshutdown namesrv The mqnamesrv(36664) is running... Send shutdown request to mqnamesrv(36664) OK ``` ## RocketMQ Dashboard - 首先要安装docker,参考docker官方安装:https://docs.docker.com/engine/install/centos/ ``` CentOS8中安装Docker出现和Podman冲突的问题的解决 yum erase podman buildah # 开始安装 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo docker run hello-world ``` ``` # 下载RocketMQ-Dashboard镜像 docker pull apacherocketmq/rocketmq-console:2.0.0 # 运行容器,namesrv.addr修改成本机IP地址 docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.106:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t apacherocketmq/rocketmq-console:2.0.0 ``` - 浏览器访问地址:192.168.0.106:8080 ## 一主一从模型,同步双写,异步刷盘模式 两台已经安装RocketMQ机器IP: - CentOS7-A:192.168.0.106 - CentOS7-B:192.168.0.103 ``` # 启动内存配置,两台机器都要修改,前边已经配置过的话,这里可以跳过 vim bin/runserver.sh JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" vim bin/runbroker.sh JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m" ``` - 启动两个机器的 Name Server ``` nohup sh bin/mqnamesrv & ``` - 主节点配置 - 复制配置文件,master节点编辑broker-a.properties ``` cd conf/ cp -r 2m-2s-sync 1m-1s-sync cd 1m-1s-sync vi broker-a.properties # 新增一行 namesrvAddr=192.168.0.106:9876;192.168.0.103:9876 ``` - 增加完配置以后,是这样的: ``` namesrvAddr=192.168.0.106:9876;192.168.0.103:9876 brokerClusterName=DefaultCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH ``` - 启动主节点Broker ``` nohup sh bin/mqbroker -c conf/1m-1s-sync/broker-a.properties & ``` - 从节点配置 - 复制配置文件,slave节点编辑broker-a-s.properties ``` cd conf/ cp -r 2m-2s-sync 1m-1s-sync cd 1m-1s-sync vi broker-a-s.properties # 新增一行 namesrvAddr=192.168.0.106:9876;192.168.0.103:9876 ``` - 增加完配置以后,是这样的: ``` namesrvAddr=192.168.0.106:9876;192.168.0.103:9876 brokerClusterName=DefaultCluster brokerName=broker-a brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH ``` - 启动从节点Broker ``` nohup sh bin/mqbroker -c conf/1m-1s-sync/broker-a-s.properties & ``` - 注释: - Consumer数量和Topic的Queue数量是倍数关系,便于负载均衡,例如有4个Consumer,就需要有4个Queue、8个Queue等,呈倍数关系。 ## RocketMQ-Dashboard ``` docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.106:9876;192.168.0.103:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t apacherocketmq/rocketmq-console:2.0.0 ``` ## 双主双从模型,同步双写,异步刷盘模式 - 准备四台CentOS7服务器,每台服务器都部署Name Server和Broker - server1:192.168.183.129,部署Name Server和Broker,broker-a - server2:192.168.183.130,部署Name Server和Broker,broker-a-s - server3:192.168.183.131,部署Name Server和Broker,broker-b - server4:192.168.183.132,部署Name Server和Broker,broker-b-s ``` # Name Server启动内存配置,根据实际机器内存大小进行配置,四台机器都要修改 vim bin/runserver.sh JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" # Broker启动内存配置,根据实际机器内存大小进行配置 vim bin/runbroker.sh JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m" ``` - 启动四台机器的 Name Server ``` nohup sh bin/mqnamesrv & ``` - A主节点配置 - master节点编辑conf/2m-2s-sync/broker-a.properties ``` cd conf/ cd 2m-2s-sync vi broker-a.properties ``` - 增加完配置以后,是这样的: ``` namesrvAddr=192.168.183.129:9876;192.168.183.130:9876;192.168.183.131:9876;192.168.183.132:9876 brokerClusterName=MeCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 # 是否允许自动创建Topic,线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许自动创建订阅组,线下开启,线上关闭 autoCreateSubscriptionGroup=true # 存储路径,根据需求进行配置绝对路径,默认是home目录下面 # storePathRootDir=/usr/local/rocketmq/data/store # storePathCommitLog=/usr/local/rocketmq/data/store/commitlog ``` - 启动A主节点Broker ``` nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties & ``` - A从节点配置 - Slave节点编辑conf/2m-2s-sync/broker-a-s.properties ``` cd conf/ cd 2m-2s-sync vi broker-a-s.properties ``` - 增加完配置以后,是这样的: ``` namesrvAddr=192.168.183.129:9876;192.168.183.130:9876;192.168.183.131:9876;192.168.183.132:9876 brokerClusterName=MeCluster brokerName=broker-a brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 # 是否允许自动创建Topic,线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许自动创建订阅组,线下开启,线上关闭 autoCreateSubscriptionGroup=true # 存储路径,根据需求进行配置绝对路径,默认是home目录下面 # storePathRootDir=/usr/local/rocketmq/data/store # storePathCommitLog=/usr/local/rocketmq/data/store/commitlog ``` - 启动A从节点Broker ``` nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties & ``` - B主节点配置 - master节点编辑conf/2m-2s-sync/broker-b.properties ``` cd conf/ cd 2m-2s-sync vi broker-b.properties ``` - 增加完配置以后,是这样的: ``` namesrvAddr=192.168.183.129:9876;192.168.183.130:9876;192.168.183.131:9876;192.168.183.132:9876 brokerClusterName=MeCluster brokerName=broker-b brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 # 是否允许自动创建Topic,线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许自动创建订阅组,线下开启,线上关闭 autoCreateSubscriptionGroup=true # 存储路径,根据需求进行配置绝对路径,默认是home目录下面 # storePathRootDir=/usr/local/rocketmq/data/store # storePathCommitLog=/usr/local/rocketmq/data/store/commitlog ``` - 启动B主节点Broker ``` nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties & ``` - B从节点配置 - Slave节点编辑conf/2m-2s-sync/broker-b-s.properties ``` cd conf/ cd 2m-2s-sync vi broker-b-s.properties ``` - 增加完配置以后,是这样的: ``` namesrvAddr=192.168.183.129:9876;192.168.183.130:9876;192.168.183.131:9876;192.168.183.132:9876 brokerClusterName=MeCluster brokerName=broker-b brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 # 是否允许自动创建Topic,线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许自动创建订阅组,线下开启,线上关闭 autoCreateSubscriptionGroup=true # 存储路径,根据需求进行配置绝对路径,默认是home目录下面 # storePathRootDir=/usr/local/rocketmq/data/store # storePathCommitLog=/usr/local/rocketmq/data/store/commitlog ``` - 启动B从节点Broker ``` nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties & ``` ## RocketMQ-Dashboard ``` docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.183.129:9876;192.168.183.130:9876;192.168.183.131:9876;192.168.183.132:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t apacherocketmq/rocketmq-console:2.0.0 ```