为什么要使用RocketMQ?
- 系统解耦,当新的模块进来时,可以做到代码改动最小。能够解耦
- 设置流程缓冲池,可以让后端系统按照自身吞吐能力进行消费。能够削峰限流
- 强弱依赖梳理能把非关键调用链路的操作异步化并提升整体系统的吞吐能力。能够异步
定义
Rocket是面向消息的中间件(message-oriented middleware)
是指利用高效可靠的消息传递机制进行与平台(跨平白)无关的数据交流,并基于数据通信来进行分布式系统的集成。
通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储,流量削峰,异步通信,数据同步等。
RocketMQ中的概念
- Producer:消息的生产者
- Consumer:消息的消费者
- Broker:暂存和传输消息的管道
- NameServer:管理Broker,相当于Broker的注册中心,保留了Broker的信息
- Queue:队列,消息存放的位置,一个Broker中可以有多个队列
- Topic:主题,消息的分类
- ProducerGroup:生产者组
- ConsumerGroup:消费者组
消息发送的流程
Producer询问NameServer,NameServer分配一个broker,然后Consumer也要询问NameServer,得到一个具体的broker,然后消费消息
消息的生产和消费
安装与配置
下载
RocketMQ下载地址:https://archive.apache.org/dist/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip
将压缩包放到Linux服务器后使用unzip解压
unzip安装命令:yum install unzip
解压后进入目录:
配置环境变量
为RocketMQ配置环境变量:vim /etc/profile
在profile最后一行添加:export NAMESRV_ADDR=localhost:9876
修改nameServer运行脚本
进入bin目录修改runserver.sh文件,将Xms和Xmx改小
vim runserver.sh
上图为已经改好的配置
修改完后wq保存退出
修改broker配置文件
进入conf目录修改broker.conf文件
vim broker.conf
- namesrvAddr:nameSrver的地址,可以写localhost,因为nameServer和broker在一个服务器
- autoCreateTopicEnable:自动创建主题,不然需要手动创建
- brokerIP1:broker也需要一个公网ip,如果不指定就是阿里云的内网地址,我们在本地无法连接使用,我这里的ip就是虚拟机的ip地址
启动RocketMQ
在安装目录下新增logs目录:mkdir logs
logs目录用于存放日志文件
启动nameSrv:nohup sh bin/mqnamesrv > ./logs/namesrv.log &
启动broker(-c指定使用的配置文件):nohup sh bin/mqbroker -c conf/broker.conf > ./logs/broker.log &
安装RocketMQ控制台(可视化MQ的消息发送)
github官方地址:https://github.com/apache/rocketmq-dashboard
jar包下载地址:https://github.com/apache/rocketmq-dashboard/archive/refs/tags/rocketmq-dashboard-1.0.0.zip
下载后进行解压,然后在目录执行:mvn clean package -Dmaven.test.skip=true
将target里面的rocketmq-dashboard-1.0.0.jar包上传到服务器
执行:nohup java -jar rocketmq-dashboard-1.0.0.jar --server.port=8001 --rocketmq.config.namesrvAddr=127.0.0.1:9876 > dashboard.log &
输入:jps -l查看服务是否被启动
启动好了就可以在本机(不是虚拟机)通过访问虚拟机的ip加8001端口访问可视化界面了
至此,RocketMQ就算安装并启动完成了