0

0

PHP之消息队列

零到壹度

零到壹度

发布时间:2018-03-28 17:56:34

|

5431人浏览过

|

来源于php中文网

原创

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

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

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

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

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

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

图片描述

二:峰值处理

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

案例:秒杀、抢购

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

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

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

三:送达保证

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

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

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

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

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

四:排序保证

全诚易惠通优惠打折管理系统
全诚易惠通优惠打折管理系统

全诚易惠通优惠折扣信息店铺管理系统是全诚团队继 “全诚商城”“外卖通” 之后又一新概念重量级作品,该系统以收集本地所有店铺优惠折扣信息为核心,在构思、设计、代码处理上都做了严密的部署和检查,继承了全诚系列产品核心模块的基础上进化而来,即为新作品,也系高度成熟度的作品,加之全诚团队精心技术支持,可为用户营造一个长期可靠的系统运行环境。本系统较易惠通相比,业务和经营范围覆盖面积更广更大,可涵盖本地所有

下载

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

案例:抢号排队等系统

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

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

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

五:扩展性

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

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


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

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

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

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

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

相关文章

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

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

下载

相关标签:

php

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

相关专题

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

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

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

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

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

4

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

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

精品课程

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

共137课时 | 8.1万人学习

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

共6课时 | 6.9万人学习

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

共13课时 | 0.8万人学习

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

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