0

0

PHP中消息队列常见使用场景

小云云

小云云

发布时间:2018-03-28 13:37:11

|

5042人浏览过

|

来源于php中文网

原创

消息队列MQ ,本质是个队列,其最简单的操作就是入队和出队,既按照程序决定何时何条件入队,和何时何条件出队。也就是说,遇到入队系统和出队系统的业务诉求不一致时的场景,就可以考虑是否用消息队列来实现了。可应用场景有很多,以下是几个常见的场景和解释。


一:异步处理、应用解耦、分布式

场景:主业务对子业务的处理结果并不关心时。

案例:电商系统中订单系统、物流系统、财务系统以及操作日志记录系统之间的关系。

通俗解释:小明是个蛋糕店员。他做好蛋糕后,放在橱窗中,在对应订单上标记『已完成』,然后继续做下一个蛋糕,并不关心蛋糕后续是怎么卖出的,也不关心啥时候卖出。
实现:使用一个队列的中间件或者中间系统来存放几个业务系统的共用部分,并独立进行处理。可以使用每个系统各自的独立标记,对各系统的处理进度进行记录。在所有系统均完成操作后,进行出队操作,或者持久化存储数据。

注意点:需要考虑中间数据的容灾能力,当故障发生并恢复时,保证业务流程可以恢复。保证每条数据都可以正确地完成处理。

图片描述

二:峰值处理

场景:流量在各个时间点不均衡

案例:秒杀、抢购

解释:小明制作蛋糕的时间比较长,订单来到后先登记成一个清单,然后逐次按顺序制作,订单量过大时,会暂时挂出『已售完』的牌子。

实现: 使用单线程的工具将业务需求进行排队处理。当业务请求达到阀值时,给出友好提示并拒绝用户的需求。

注意点:对于消峰需求,可以高峰期挂出『暂时无法购买,请稍等』等提示,防止流量对后续业务的冲击。对于秒杀等抢完即停的需求,需要考虑超发问题,可以添加一个名额计数器,或者在秒杀名额已满员时,发放一个秒杀完成标记,后续处理程序检测到完成标记后,再进行后续处理。
图片描述

三:送达保证

场景:内容需要逐条严格执行,并保证执行成功,执行不成功或者中断时,可以恢复

案例:银行、财务类系统,需提升容灾能力的系统

解释:小明制作的蛋糕需要客户验货签收后,才可以继续制作下一个蛋糕。

实现:入队系统将业务需求写入消息队列后,即进行下一次业务处理。后续处理程序对队列内容进行逐条处理,处理完成后发放『完成许可』。消息队列中的内容,只有取得『完成许可』后,才可以从消息队列中删除。

注意点:重点考虑容灾相关问题,如业务恢复问题、重复处理问题。
图片描述

四:排序保证

家作
家作

淘宝推出的家装家居AI创意设计工具

下载

场景:消息队列中的内容有严格的顺序。

案例:抢号排队等系统

解释:小明制作蛋糕的顺序需要严格按下单顺序来制作。

实现:入队系统将内容逐条写入消息队列,并按单线排列,按先进先出的顺序来提出数据并进行后续处理。

注意点:需要使用单线程,保证只有一条生产线。
图片描述

五:扩展性

立即学习PHP免费学习笔记(深入)”;

场景:采用发布-订阅模式时,添加新的订阅者
案例:注册用户后,发送成功短信的模型中,追加一个发送email的功能
实现: 由多个消费者订阅一个消息的中间层,然后发布者将信息发布到中间层中。 订阅了这个中间层的消费者均可以收到这个消息,并进行后续处理。在这个结构中。如果想添加一个消息的后续处理组件 ,只需要将这个组件订阅到中间层即可
注意点:保证业务之间没有深度耦合,防止扩展时造成干扰。
图片描述


以上就是消息队列比较常用的几种场景,消息队列可以平覆系统之间的差异,提高系统稳定性,适用场景还有很多。

在消息队列介质选择时,建议同学们不用在一开始就一定要将条件和目标最大化,一定要以什么样的条件完善完美的解决问题,程序还是需要一个长久维护与优化的过程。

虽然Redis在高流量且需要大量持久化数据等情况下,性能下降还是很严重的,但是还是建议大家从Redis来学习队列,在课程中仅是通过改流程理解队列的应用场景和思路,任何线上项目都是不断优化与完善的,如果想通过一套视频完善的解决所有的问题,对不起臣妾做不到,每个工作的需求和应用场景都不同所以在有不同需求时就根据具体需求进行完善。

在判断队列需求时候,需要判断队列条件应用时添加计数器字段在每次压入队列时判断当前队列的长度数量,如果数量超过限定的秒杀数量不在进入队列程序。

在实际使用时,并不需要刻意追求哪些地方需要添加消息队列。而应该按照实际情况,在进行业务分离和解耦合,以及一些特殊诉求时合理地选择和运用。

相关推荐:

PHP消息队列详解

PHP之消息队列实现及应用

php实现消息队列类实例分享

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2012

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1333

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1233

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1402

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1231

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1440

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

74

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号