PHP加MySQL消息队列深入理解


Posted in PHP onFebruary 27, 2021

消息队列:在消息的传输过程中保存消息的容器。
消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

PHP加MySQL消息队列深入理解

如图所示
在不使用消息队列的情况下,用户的请求数据直接写入数据库,再高并发的情况下,会对数据库造成巨的压力,同时也使得响应延迟加剧。在使用消息队列后,用户请求的数据发送给消息队列后立即返回,再由消息队列的消费者进程(通常情况下,该进程独立部署在专门的服务器集群上)从消息队列中获取数据,异步写入数据库。由于消息队列服务器处理速度远大于数据库,因此用户的响应延迟可得到有效改善。

尤其是在淘宝搞“双十一”,“春节特卖”等活动时,使用消息队列有很好的削峰作用--------
即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。所以在一些电子商务网站促销活动中,合理使用消息队列,可有效抵御促销活动刚开始大量涌入的订单对系统造成的冲击。

PHP加MySQL消息队列深入理解

需要注意的是,由于数据写入消息队列后立即返回给用户数据在后续的业务校验、写数据库等操作可能失败,因此在使用消息队列进行业务异步处理后,需要适当修改业务流程进行配合,如订单提交后,订单数据写入消息队列,不能立即返回用户订单提交成功,需要在消息队列的订单消费者进程真正处理完该订单,甚至商品出库后,再通过电子邮件或SMS消息通知用户订单成功,以免交易纠纷。

最近遇到一个批量发送短信的需求,短信接口是第三方提供的。刚开始想到,获取到手机号之后,循环调用接口发送不就可以了吗?

但很快发现问题:当短信数量很大时,不仅耗时,而且成功率很低。

于是想到,用PHP和MySQL实现一个消息队列,一条一条的发送短信。下面介绍具体的实现方法:

首先,建立一个数据表sms,包含以下字段:

id,
phone, //手机号
content //短信内容

将需要发送的短信和手机号存入sms表中。

接下来,需要用PHP实现一个定时器,定时读取一条记录,并发送短信:

<?php
$db = new Db();
$sms = new Sms();
while(true){
  $item = $db->getFirstRecord(); //获取数据表第一条记录
  if(!$item){
    //如果队列中没有数据,则结束定时器
    break;
  }
  $res = $sms->send($item['phone'],$item['content']); //发送短信
  if($res){
    $db->deleteFristRecord(); //删除发送成功的记录
    echo $item['phone'].'发送成功';
  }else{
    echo $item['phone'].'发送失败,稍后继续尝试';
  }
  sleep(10); //每隔十秒循环一次      
}
 
echo '发送完毕!';
?>

将代码保存为timer_sms.php,打开命令行,执行定时器:

php timer_sms.php

到此这篇关于PHP+MySQL消息队列深入理解的文章就介绍到这了,更多相关PHP+MySQL消息队列内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
php str_pad 函数使用详解
Jan 13 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
ThinkPHP控制器间实现相互调用的方法
Oct 31 PHP
dedecms中使用php语句指南
Nov 13 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 PHP
php慢查询日志和错误日志使用详解
Feb 27 #PHP
php的单例模式及应用场景详解
Feb 27 #PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 #PHP
PHP并发场景的三种解决方案代码实例
Feb 27 #PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 #PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 #PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 #PHP
You might like
PHP文本操作类
2006/11/25 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
jquery查找tr td 示例模拟
2014/05/08 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python中文件遍历的两种方法
2014/06/16 Python
python实现数独算法实例
2015/06/09 Python
Python网络编程 Python套接字编程
2017/09/13 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
python属于软件吗
2020/06/18 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
道德大讲堂实施方案
2014/05/14 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
分享Python获取本机IP地址的几种方法
2022/03/17 Python