php-消息队列

2020-04-04  本文已影响0人  AGEGG

主要内容

1.消息队列的概念,原理和场景
2.解耦案例:队列处理订单系统和配送系统
3.流量削峰案例:Redis的List类型实现秒杀
RabbitMQ:更专业的消息系统实现方案

1.消息队列的概念、原理、实现方式

1.1消息队列概念

队列结构的中间件
消息放入后,不需要立即处理
由订阅者/消费者按顺序处理


image.png
1.3 应用场景

冗余
解耦
流量削峰
异步通信
拓展性
排序保证

常见队列实现优缺点

队列介质
1.Mysql:可靠性,易实现,速度慢
2.Redis: 速度快,单条大消息包时效率低
3.消息系统:专业性强,可靠,学习成本高

消息处理触发机制

1.死循环方式读取:易实现,故障时无法及时恢复
2.定时任务:压力均分,有处理量上限
3.守护进程:类似于PHP-FPM和PHP-CG,需要shell基础

2.解耦案例:队列处理订单系统和配送系统

image.png image.png

思路:使用队列将订单系统与配送系统解耦
1.订单系统同以往记录到mysql
2.配送处理系统每次查询数个未完成订单标记为代执行订单,执行配送业务后标记为以完成
3.使用定时任务定时执行配送处理系统

image.png image.png

3.流量削峰案例:Redis的list类型实现秒杀

3.1redis数据类型中的list类型

双向链表
LPUSH/LPUSHX:将值插入到(/存在的)列表头部
LPUSHX:将值插入到存在的列表头部,若不存在操作无效
RPUSH/RPUSHX:将值插入到(/存在的)列表尾部
LPOP:移出并获取列表的第一个元素
RPOP:移出并获取列表的最后一个元素
LTRIM:保留指定区间内的元素
LLEN:获取列表长度
LSET:通过索引设置列表元素的值
LINDEX:通过索引获取列表中的元素
LRANGE:获取列表指定范围的元素


image.png image.png

思路:
1.存到redis的list中形成队列
2.从redis队列中取出保存数据库

RabbitMQ

image.png image.png
上一篇 下一篇

猜你喜欢

热点阅读