RocketMQ笔记(五):搭建RocketMQ运行环境
详细部署方式可以参考官网:官网RocketMQ部署方式。
一、环境准备
1.1、JDK环境准备
详情参考:Linux搭建JDK环境。
1.2、RocketMQ准备
1、下载RocketMQ
下载RocketMQ地址:rocketmq-all-4.7.1-bin-release.zip。
2、将RocketMQ上传至服务器
本次上传地址:/usr/local/develop/RocketMQ
3、解压RocketMQ压缩包
unzip rocketmq-all-4.7.1-bin-release.zip
若出现unzip: command not found,则参考yun源依赖处理。
二、RocketMQ配置
2.1、日志输出处理
创建logs文件夹
2.2、修改配置文件内存(如果内存可以修改)
1、修改runserver.sh内存
在bin目录下,有一个runserver.sh文件,我们打开它,修改以下配置:
vi /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin/runserver.sh
# 这是修改后的样子
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
2、修改runbroker.sh内存
在bin目录下,有一个runbroker.sh文件,我们打开它,修改以下配置:
vi /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin/runbroker.sh
# 这是修改后的样子
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
3、修改tools.sh内存
在bin目录下,有一个tools.sh文件,我们打开它,修改以下配置:
vi /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin/tools.sh
# 这是修改后的样子
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"
2.3、broker.conf配置修改
在conf目录下的broker.conf文件中我们需要加入如下配置:
# 这个 brokerName 属性最好自己改一下,然后最后再broker启动日志一定要对应上这个名称
brokerName = broker
# 当生产者生产的topic没有的话,这个topic会被mq自己创建
autoCreateTopicEnable=true
# 其中的ip是自己部署rocketmq服务的地址
# NameServer的地址,如果有多个的话,使用分号分隔开
namesrvAddr=192.168.33.55:9876
# 当前broker监听的IP地址
brokerIP1=192.168.33.55
# broker对外服务的监听端口
listenPort=10911
三、RocketMQ启动
1、启动namesrv
1.1、切换到bin目录下
cd /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin
1.2、启动namesrv
nohup ./mqnamesrv >../logs/namesrv.log &
1.3、验证namesrv是否启动成功
1、命令查看
jps
2、日志查看
view ../logs/namesrv.log
2、启动broker
2.1、执行broker启动命令
# >../logs/broker.log > 负号后面跟的是日志输出路径
# ip是配置部署rocketmq的ip
# nohup ./mqbroker -n ip:9876 -c ../conf/broker.conf >../logs/broker.log &
nohup ./mqbroker -n 192.168.33.55:9876 -c ../conf/broker.conf >../logs/broker.log &
2.2、验证是否启动成功
1、查看日志
view ../logs/broker.log
2、jps命令查看
3、启动RocketMQ脚本整理
3.1、创建目录
创建存放启动命令的脚本目录:/usr/local/start
cd /usr/local
mkdir start
3.2、新建RocketMQ启动命令脚本
touch start_rocket.sh
3.3、start_rocket.sh脚本
#!/bin/sh
cd /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin
echo 'start namesrv...'
nohup ./mqnamesrv >../logs/namesrv.log &
echo 'start namesrv finish...'
echo 'start broker...'
nohup ./mqbroker -n 192.168.33.55:9876 -c ../conf/broker.conf >../logs/broker.log &
echo 'start broker...'
jps
为start_rocket.sh脚本赋予执行权限。
sudo chmod 777 start_rocket.sh
3.4、脚本执行结果
通过jps命令,namesrv、broker都已启动成功,脚本验证成功。
四、测试消息收发
4.1、工具测试消息收发
1、切换到RocketMQ解压目录
cd /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release
2、测试生产者
# 生产者生产1000条消息
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
3、测试消费者
# 消费者消费1000条消息
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
4.2、SDK测试消息收发
新建maven工程,用于测试SDK消息收发。
1、引入依赖pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.snails</groupId> <artifactId>snails-mq</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <rocketmq-client-version>5.0.0</rocketmq-client-version> </properties> <dependencies> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>${rocketmq-client-version}</version> </dependency> </dependencies> </project>
2、生产者示例
1 import org.apache.rocketmq.client.exception.MQBrokerException; 2 import org.apache.rocketmq.client.exception.MQClientException; 3 import org.apache.rocketmq.client.producer.DefaultMQProducer; 4 import org.apache.rocketmq.client.producer.SendResult; 5 import org.apache.rocketmq.common.message.Message; 6 import org.apache.rocketmq.remoting.common.RemotingHelper; 7 import org.apache.rocketmq.remoting.exception.RemotingException; 8 import java.io.UnsupportedEncodingException; 9 10 /** 11 * @Description: SDK同步发送消息测试 12 * @author: snails 13 * @since: 2022/12/29 16:29 14 */ 15 public class SyncProducerTest { 16 public static void main(String[] args) throws MQClientException, UnsupportedEncodingException, MQBrokerException, RemotingException, InterruptedException { 17 // 实例化生产者组名称 18 DefaultMQProducer producer = new DefaultMQProducer("test-group"); 19 // 指定name server地址 20 producer.setNamesrvAddr("192.168.33.55:9876"); 21 // 启动生产者实例 22 producer.start(); 23 for (int i = 0; i < 3; i++) { 24 // 创建消息实例,并指定主题、消息标签、消息内容 25 Message msg = new Message("TestTopic" /* Topic */,"TagA" /* Tag */, 26 ("订单 -- " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */ 27 ); 28 // 发送消息至RocketMQ服务端 29 String orderMsg = new String(msg.getBody(), "UTF-8"); 30 System.out.println("发送订单消息:" + orderMsg); 31 SendResult sendResult = producer.send(msg); 32 System.out.printf("消息发送结果:%s%n", sendResult); 33 } 34 // 关闭不再使用的生产者实例 35 producer.shutdown(); 36 } 37 }
3、消费者示例
1 import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; 2 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext; 3 import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; 4 import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; 5 import org.apache.rocketmq.client.exception.MQClientException; 6 import org.apache.rocketmq.common.message.MessageExt; 7 import java.io.UnsupportedEncodingException; 8 import java.util.List; 9 10 /** 11 * @Description: SDK同步消费消息测试 12 * @author: snails 13 * @since: 2022/12/29 17:37 14 */ 15 public class SyncConsumerTest { 16 public static void main(String[] args) throws MQClientException { 17 18 // 实例化消费者组名称 19 DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test-group"); 20 // 指定name server地址 21 consumer.setNamesrvAddr("192.168.33.55:9876"); 22 // 订阅至少一个主题以供消费 23 consumer.subscribe("TestTopic", "*"); 24 // 注册回调,处理从服务端获取的消息 25 consumer.registerMessageListener(new MessageListenerConcurrently() { 26 @Override 27 public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { 28 for (MessageExt msg : msgs) { 29 try { 30 System.out.println(String.format("线程%s,接收订单:%s", Thread.currentThread().getName(), new String(msg.getBody(), "UTF-8"))); 31 } catch (UnsupportedEncodingException e) { 32 // TODO 补偿机制 33 System.out.println(e.getMessage()); 34 } 35 } 36 // 消费消息确认 37 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; 38 } 39 }); 40 // 启动消费者实例 41 consumer.start(); 42 System.out.printf("消费者已启动.%n"); 43 } 44 }
4、测试结果
生产者生产消息:
消费者消费消息:

六、RocketMQ控制台
1、项目下载
RocketMQ控制台项目地址:https://gitee.com/sunny_umbrella/rocketmq-dashboard.git
2、配置修改
下载好后在IDEA中打开项目,并修改application.yml配置文件中的 namesrvAddrs 属性
修改ip即可。
3、执行App.java
出现如下信息代表启动成功。
4、验证是否启动成功
浏览器访问:http://127.0.0.1:8080/#/
七、关闭namesrv与broker
1、关闭namesrv
·执行关闭命令
sh mqshutdown namesrv
·jps查看是否关闭成功
namesrv已经成功关闭。
2、关闭broker
·执行关闭命令
sh mqshutdown broker
·jps查看是否关闭成功
3、关闭RocketMQ脚本整理
3.1、创建目录
创建存放启动命令的脚本目录:/usr/local/stop
cd /usr/local
mkdir stop
3.2、新建RocketMQ关闭命令脚本
touch stop_rocket.sh
3.3、stop_rocket.sh脚本
#!/bin/sh
cd /usr/local/develop/RocketMQ/rocketmq-all-4.7.1-bin-release/bin
echo 'stop namesrv...'
sh mqshutdown namesrv &
echo 'stop namesrv finish...'
echo 'stop broker...'
sh mqshutdown broker &
echo 'stop broker finish...'
jps
为stop_rocket.sh脚本赋予执行权限。
sudo chmod 777 stop_rocket.sh
3.4、脚本执行结果
八、yum源依赖
安装依赖环境
sudo yum install -y yum-utils
出现如下问题,无法安装yum-utils-1.1.31-54.el7_8.noarch对应的依赖:
yum-utils-1.1.31-54.el7_8.noarch: [Errno 256] No more mirrors to try.
解决方案:手动安装yum所依赖的包
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/rpm-4.11.3-45.el7.x86_64.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-utils-1.1.31-54.el7_8.noarch.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-rhn-plugin-2.0.1-10.el7.noarch.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-168.el7.centos.noarch.rpm
# unzip解压依赖包
curl -O https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/unzip-6.0-21.el7.x86_64.rpm
可以执行以下命令全部安装:
rpm -ivh yum* --force --nodeps
出现如下界面表示yum-utils安装成功
也可以单个安装
rpm -ivh unzip-6.0-21.el7.x86_64.rpm --force --nodeps
安装成功界面
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业