RocketMQ 单节点
RocketMQ是阿里巴巴2016年MQ中间件,使用Java语言开发,在阿里内部,RocketMQ承接了例如“双11”等高并发场景的消息流转,能够处理万亿级别的消息。
RocketMQ各个角色介绍
Producer:消息的发送者;举例:发信者
Consumer:消息接收者;举例:收信者
Broker:暂存和传输消息;举例:邮局
NameServer:管理Broker;举例:各个邮局的管理机构
Topic:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以订阅一个或者多个Topic消息
Message Queue:相当于是Topic的分区;用于并行发送和接收消息
准备工作
RocketMQ下载
我们在这里下载二进制版本的文件,也就是zip包,以linux为例,必备环境有:
Linux64位系统
JDK1.8(64位)
JDK安装(已搭建可跳过)
以jdk-8u221-linux-x64.tar.gz为例,下载好后先将其拷贝至服务器,然后创建想要存放的文件夹(位置自拟)
mkdir /opt/java
# 笔者的jdk放在software里,将其拷贝过来
cp /opt/software/jdk-8u221-linux-x64.tar.gz /opt/java cd /opt/java
bash
解压jdk,完成后会在当前目录下生成jdk1.8.0_221文件夹
tar -zxvf jdk-8u211-linux-x64.tar.gz
# 解压之后删除jdk包(不删也行,笔者是因为software里有)
rm -f jdk-8u211-linux-x64.tar.gz
AI写代码
bash
设置环境变量,这一步的目的是使linux全局都能使用jdk里的命令,不需要进到相应目录里
vim /etc/profile
# 添加以下内容,注意路径对应你的安装路径
export JAVA_HOME=/opt/java/jdk1.8.0_221
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# 执行下方命令使得环境变量立刻生效
source /etc/profile
AI写代码
bash
测试,成功显示jdk版本则表示成功
RocketMQ安装
以rocketmq-all-4.5.2-bin-release.zip为例,拷贝至服务器,创建要存放的目录
mkdir /opt/rocketmq
cp /opt/software/rocketmq-all-4.5.2-bin-release.zip /opt/rocketmq
cd /opt/rocketmq
AI写代码
解压rocketmq二进制文件
# 安装unzip
yum install unzip
# 解压
unzip rocketmq-all-4.5.2-bin-release.zip
# 删除压缩包
rm -f rocketmq-all-4.5.2-bin-release.zip
AI写代码
bash
完成后,可以看到生成了rocketmq-all-4.5.2-bin-release文件夹,打开能够看见以下几个目录
benchmark:一些demo,方便测试
bin:启动脚本,包括shell脚本和CMD脚本
conf:实例配置文件 ,包括broker配置文件、logback配置文件等
lib:依赖jar包,包括Netty、commons-lang、FastJSON等
启动RocketMQ
建议先修改两个配置文件,因为RocketMQ默认使用的JVM内存很大,可能导致启动失败,都是以后台方式启动。
# 进入RocketMQ的bin目录
cd /opt/rocketmq/rocketmq-all-4.5.2-bin-release/bin/
# 编辑runbroker.sh和runserver.sh修改默认JVM大小
vim runbroker.sh
vim runserver.sh
# 参考设置
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
AI写代码
bash
1、启动NameServer
# 1.进入bin目录,如果将rocketmq配置到环境变量了就不需要
cd /opt/rocketmq/rocketmq-all-4.5.2-bin-release/bin/
# 2.启动NameServer,后台启动方式
nohup sh mqnamesrv &
# 3.查看启动日志
tail -f ~/logs/rocketmqlogs/namesrv.log
AI写代码
bash
执行时会出现nohup: ignoring input and appending output to ‘nohup.out’这样的信息,直接回车就行,查看日志时,看到下图信息则表示NameServer启动成功
或者使用jps命令查看当前正在运行的java程序里有无NameServer
2、启动Broker
# 1.启动Broker,-n代表指定Broker要连接的NameServer(默认端口9876)
nohup sh mqbroker -n localhost:9876 &
# 2.查看启动日志
tail -f ~/logs/rocketmqlogs/broker.log
AI写代码
bash
查看日志,出现以下信息代表启动成功
查看jps
3、关闭RocketMQ
先关Broker,再关NameServer
# 1.关闭NameServer
sh bin/mqshutdown namesrv
# 2.关闭Broker
sh bin/mqshutdown broker
AI写代码
bash
测试RocketMQ
需打开两个连接服务器的窗口,一个执行生产者脚本,另一个执行消费者脚本
生产者
# 1.设置环境变量
export NAMESRV_ADDR=localhost:9876
# 2.使用安装包的Demo发送消息(需要进入bin目录)
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
AI写代码
bash
消费者
# 1.设置环境变量
export NAMESRV_ADDR=localhost:9876
# 2.接收消息
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
AI写代码
bash
查看现象会发现,生产者发出的消息,都被消费者接收了,代表RocketMQ生效了
# 生产者打印
SendResult [sendStatus=SEND_OK, msgId=AC1353A428356FF3C5B5028DCCEB03E3, offsetMsgId=AC1353A400002A9F0000000000083892, messageQueue=MessageQueue [topic=TopicTest, brokerName=izuf6gvuc5k1i27heipwewz, queueId=2], queueOffset=748]
SendResult [sendStatus=SEND_OK, msgId=AC1353A428356FF3C5B5028DCCED03E4, offsetMsgId=AC1353A400002A9F0000000000083946, messageQueue=MessageQueue [topic=TopicTest, brokerName=izuf6gvuc5k1i27heipwewz, queueId=3], queueOffset=749]
SendResult [sendStatus=SEND_OK, msgId=AC1353A428356FF3C5B5028DCCEE03E5, offsetMsgId=AC1353A400002A9F00000000000839FA, messageQueue=MessageQueue [topic=TopicTest, brokerName=izuf6gvuc5k1i27heipwewz, queueId=0], queueOffset=749]
SendResult [sendStatus=SEND_OK, msgId=AC1353A428356FF3C5B5028DCCEF03E6, offsetMsgId=AC1353A400002A9F0000000000083AAE, messageQueue=MessageQueue [topic=TopicTest, brokerName=izuf6gvuc5k1i27heipwewz, queueId=1], queueOffset=749]
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/IcyDate/article/details/102853020
浙公网安备 33010602011771号