RocketMQ学习(一):入门

目录

RocketMQ各个角色介绍

准备工作

JDK安装(已搭建可跳过)

RocketMQ安装

启动RocketMQ

1、启动NameServer

2、启动Broker

3、关闭RocketMQ

测试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

解压jdk,完成后会在当前目录下生成jdk1.8.0_221文件夹

tar -zxvf jdk-8u211-linux-x64.tar.gz
# 解压之后删除jdk包(不删也行,笔者是因为software里有)
rm -f jdk-8u211-linux-x64.tar.gz

设置环境变量,这一步的目的是使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

测试,成功显示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

解压rocketmq二进制文件

# 安装unzip
yum install unzip
# 解压
unzip rocketmq-all-4.5.2-bin-release.zip
# 删除压缩包
rm -f rocketmq-all-4.5.2-bin-release.zip

完成后,可以看到生成了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"

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

执行时会出现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 

查看日志,出现以下信息代表启动成功

查看jps

3、关闭RocketMQ

先关Broker,再关NameServer

# 1.关闭NameServer
sh bin/mqshutdown namesrv
# 2.关闭Broker
sh bin/mqshutdown broker

测试RocketMQ

需打开两个连接服务器的窗口,一个执行生产者脚本,另一个执行消费者脚本

生产者

# 1.设置环境变量
export NAMESRV_ADDR=localhost:9876
# 2.使用安装包的Demo发送消息(需要进入bin目录)
sh tools.sh org.apache.rocketmq.example.quickstart.Producer

消费者

# 1.设置环境变量
export NAMESRV_ADDR=localhost:9876
# 2.接收消息
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

查看现象会发现,生产者发出的消息,都被消费者接收了,代表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]

# 消费者打印
ConsumeMessageThread_16 Receive New Messages: [MessageExt [queueId=0, storeSize=180, queueOffset=606, sysFlag=0, bornTimestamp=1572580446202, bornHost=/172.19.83.164:56686, storeTimestamp=1572580446203, storeHost=/172.19.83.164:10911, msgId=AC1353A400002A9F000000000006A7CA, commitLogOffset=436170, bodyCRC=1150532008, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1572580468463, UNIQ_KEY=AC1353A428356FF3C5B5028DC7FA01A9, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 52, 50, 53], transactionId='null'}]] 
ConsumeMessageThread_19 Receive New Messages: [MessageExt [queueId=1, storeSize=180, queueOffset=612, sysFlag=0, bornTimestamp=1572580446263, bornHost=/172.19.83.164:56686, storeTimestamp=1572580446264, storeHost=/172.19.83.164:10911, msgId=AC1353A400002A9F000000000006B95E, commitLogOffset=440670, bodyCRC=2075712480, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1572580468487, UNIQ_KEY=AC1353A428356FF3C5B5028DC83701C2, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 52, 53, 48], transactionId='null'}]] 
ConsumeMessageThread_18 Receive New Messages: [MessageExt [queueId=1, storeSize=180, queueOffset=611, sysFlag=0, bornTimestamp=1572580446257, bornHost=/172.19.83.164:56686, storeTimestamp=1572580446258, storeHost=/172.19.83.164:10911, msgId=AC1353A400002A9F000000000006B68E, commitLogOffset=439950, bodyCRC=197152660, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1572580468487, UNIQ_KEY=AC1353A428356FF3C5B5028DC83101BE, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 52, 52, 54], transactionId='null'}]] 
ConsumeMessageThread_1 Receive New Messages: [MessageExt [queueId=1, storeSize=180, queueOffset=610, sysFlag=0, bornTimestamp=1572580446251, bornHost=/172.19.83.164:56686, storeTimestamp=1572580446252, storeHost=/172.19.83.164:10911, msgId=AC1353A400002A9F000000000006B3BE, commitLogOffset=439230, bodyCRC=212700045, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1572580468487, UNIQ_KEY=AC1353A428356FF3C5B5028DC82B01BA, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 52, 52, 50], transactionId='null'}]] 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值