学习目标
能够在Linux中安装RocketMq
了解RocketMq控制台
通过JavaAPI操作Rocketmq
1. MQ 介绍
MQ全称:Message Quene ,也就是我们常说的消息队列,它是生产者-消费者模型的一个典型代表
生产者往消息队列中不断写入消息,而消费者则读取队列中的消息进行处理
比如:
简单理解:MQ就是一个可以接收、保存、发送数据的应用,可以认为一个 List 就是一个mq
2. 应用场景
MQ有 3 大应用场景:
1. 异步
发送消息到队列,让一些非必要的业务以异步的方式运行,加快响应的速度
没有mq的时候,我们网上买东西,
后台逐个的:下订单、发短信、增加积分,这样时间比较长,用户体验不好
有了MQ
下完订单后,发送一条消息给MQ,之后立即返回,这样减少客户等待时间
后台 积分服务和短信服务 分别读取消息,并行的给客户增加积分和发送短信
2. 解耦
使各个服务之间不必强依赖,避免一个服务产生问题而影响其他服务
客户下单成功后,订单系统需要通知库存系统去减库存,一般情况下是这样子的
使用MQ
这样的话,就算库存服务故障,也不会影响到客户,同时MQ也存储了消息,等库存服务恢复,再读取处理就行了
3. 削峰
当请求过多的时候后端服务可能处理不过来,这时候就可以把请求放到消息队列,让后端服务一个个处理
没有MQ的时候
请求直接通过系统A直接写入数据库,会给数据库造成极大的压力,甚至出现数据库异常,最终导致系统崩溃。
有了MQ
这样的话,系统从消息队列中依次取出请求处理,虽然速度会慢上一些,但是好处:
**可以控制请求下单的数量,超过指定数量的请求直接丢弃,**比如抢购:超过数量的请求直接返回失败
缓解短时间内的高流量请求,让系统按照自己的最大处理能力去处理请求,这样会避免系统压力过大,甚至崩溃的情况。另外,在生产环境中,短暂的高峰期积压也是允许的。
3. Rocket MQ 介绍
RocketMQ是阿里巴巴出品的一款开源的纯java、分布式、队列模型的开源消息中间件
官网地址:https://rocketmq.apache.org/
角色介绍
producer:生产者
consumer:消费者
broker:存储消息,接收 producer 的消息,发送给 consumer
nameserver:服务发现者,类似注册中心,集群中各个角色(producer、broker、consumer等)都需要定时向nameserver上报自己的状态,超时不上报的话,nameserver会把它从列表中剔除
4. 安装
官方文档:https://rocketmq.apache.org/zh/docs/4.x/introduction/02quickstart
1. 安装要求
64bit OS, Linux/Unix/Mac
64bit JDK 1.8+
2. 安装jdk
省略
3. 安装RocketMq
1. 解压
rocketmq-all-4.9.3-bin-release.pdf 修改后缀为zip
上传到:/home/soft
解压:unzip rocketmq-all-4.9.3-bin-release.zip
注意:如果没有unzip命令,执行:yum install zip unzip
修改 目录名称
2. 配置
RocketMQ 的默认内存占用非常高,一般需要 4-8G ,我们虚拟机没有这么大的内存,所以需要修改
它的 bin 目录下有2个启动脚本:runbroker.sh 和 runserver.sh
runbroker.sh
runserver.sh
修改 conf/broker.conf 文件,增加两行
namesrvAddr=127.0.0.1:9876
# 当前brker监听的IP地址,用于生产者、消费者建立连接,如果有多个IP地址,要指定一个
brokerIP1=192.168.56.104
3. 启动
1. 启动 nameServer
进入:/home/soft/rocketmq 文件夹,执行:nohup sh bin/mqnamesrv &
默认情况下日志在 "~" 文件夹
注意:nameServer 默认监听的是9876端口
2. 启动 broker
进入:cd /home/soft/rocketmq 目录
执行:nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &
-n localhost:9876:表示启动时连接nameServer
-c conf/broker.conf:指定启动时的配置文件
查看日志: tail -f ~/logs/rocketmqlogs/broker.log
3. 关闭
关闭命令:sh bin/mqshutdown broker、sh bin/mqshutdown namesrv
注意:以上命令都是在 /home/soft/rocketmq/ 目录执行
4. 控制台
Rocket MQ提供了一个可视化的界面,用与管理数据
rocketmq-dashboard-rocketmq-dashboard-1.0.0.pdf 修改后缀名为 tar.gz
地址:https://github.com/apache/rocketmq-dashboard/releases/tag/rocketmq-dashboard-1.0.0
下载下来是个spring boot 工程,可以导入 idea 中,修改application.properties
启动项目前确保 rocketmq 所在的机器,防火墙已经关闭
启动成功后,访问:http://localhost:8080/
也可以用官方的说法,修改application.properties后,在命令行执行:
mvn clean package -Dmaven.test.skip=true
这样把项目打成一个 jar 包,然后 java -jar rocketmq-console-ng-1.0.0.jar