1. MQ简介
1.1 项目工程弊端
1.2 MQ简介
- MQ(Message Queue)消息队列,是一种用来保存消息数据的队列.
- 队列:数据结构的一种,特征为 “先进先出”
- 何为消息
- 服务器间的业务请求
- 原始架构:
- 服务器中的A功能需要调用B、C模块才能完成
- 微服务架构:
- 服务器A向服务器B发送要执行的操作(视为消息)
- 服务器A向服务器C发送要执行的操作(视为消息)
- 小节:MQ概念
1.3 MQ作用
` 1. 应用解耦
2. 快速应用变更维护 3. 流量削锋
1.4 MQ基本工作模式
应用解耦:(异步消息发送)
快速应用变更维护:(异步消息发送)
流量削锋:(异步消息发送)
1.5 MQ优缺点分析
优点(作用):
- 应用解耦
- 快速应用变更维护
- 流量削锋
缺点:
1. 系统可用性降低 2. 系统复杂度提高 3. 异步消息机制 1. 消息顺序性 2. 消息丢失 3. 消息一致性 4. 消息重复使用
1.6 MQ产品介绍
- ActiveMQ
- java语言实现,万级数据吞吐量,处理速度ms级,主从架构,成熟度高
- RabbitMQ
- erlang语言实现,万级数据吞吐量,处理速度us级,主从架构,
- RocketMQ
- java语言实现,十万级数据吞吐量,处理速度ms级,分布式架构,功能强大,扩展性强
- kafka
- scala语言实现,十万级数据吞吐量,处理速度ms级,分布式架构,功能较少,应用于大数据较多
RocketMQ
RocketMQ是阿里开源的一款非常优秀中间件产品,脱胎于阿里的另一款队列技术MetaQ,后捐赠给Apache基金会 作为一款孵化技术,仅仅经历了一年多的时间就成为Apache基金会的顶级项目。并且它现在已经在阿里内部被广泛 的应用,并且经受住了多次双十一的这种极致场景的压力(2017年的双十一,RocketMQ流转的消息量达到了万亿 级,峰值TPS达到5600万)
- 解决所有缺点
幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等。
在增删改查4个操作中,尤为注意就是增加或者修改,查询对于结果是不会有改变的,删除只会进行一次,用户多次点击产生的结果一样,修改在大多场景下结果一样,增加在重复提交的场景下会出现。
2. 环境搭建
2.1 基础概念
两边生产者消费者都会去找命名服务器,之后找到broke,信息生产者会推送消息,消费者会拉取监听器监听队列之后消费消息.
- 生产者
- 消费者
- 消息服务器
- 命名服务器
- 消息
- 主题
- 标签
- 心跳
- 监听器
- 拉取消费、推动消费
- 注册
2.2 安装
- 命名服务器
- 消息服务器
2.3 下载
2.4 安装过程
- 步骤1:安装JDK(1.8)
- 步骤2:上传压缩包(zip)
yum -y install lrzsz
rz
- 步骤3:解压缩
unzip rocketmq-all-4.5.2-bin-release.zip
- 步骤4:修改目录名称
mv rocketmq-all-4.5.2-bin-release rocketmq
2.5 启动服务器
- 步骤1:启动命名服务器(bin目录下)
sh mqnamesrv
- 步骤2:启动消息服务器(bin目录下)
sh mqbroker -n localhost:9876
修改runbroker.sh文件中有关内存的配置(调整的与当前虚拟机内存匹配即可,推荐256m-128m)
2.6 测试服务器环境
- 步骤1:配置命名服务器地址
export NAMESRV_ADDR=localhost:9876
- 步骤2:启动生产者程序客户端(bin目录下)
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
启动后产生大量日志信息(注意该信息是测试程序中自带的,不具有通用性,仅供学习查阅参考)
- 步骤3:启动消费者程序客户端(bin目录下)
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
启动后产生大量日志信息