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 相关文章推荐
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
PHP编程入门的基本语法知识点总结
Jan 26 PHP
php用户登录之cookie信息安全分析
May 13 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
Oct 08 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
Yii redis集合的基本使用教程
Jun 14 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编写一个简单的路由类
2011/04/13 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
php中大括号作用介绍
2012/03/22 PHP
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
PHP简单遍历对象示例
2016/09/28 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
pycharm打开命令行或Terminal的方法
2019/01/16 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
python的pip有什么用
2020/06/17 Python
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
计划生育工作汇报
2014/10/28 职场文书
导游词怎么写
2015/02/04 职场文书
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
Java实现带图形界面的聊天程序
2022/06/10 Java/Android
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript