PHP+MySQL实现消息队列的方法分析


Posted in PHP onMay 09, 2018

本文实例讲述了PHP+MySQL实现消息队列的方法。分享给大家供大家参考,具体如下:

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

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

于是想到,用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定时器将会根据设定的时间间隔(这里设的是10秒),自动完成发送短信的任务。任务完成后将自动退出定时器,不再占用服务器资源。

根据我的测试,PHP定时器占用资源并不多,不会对服务器造成压力。而且是异步访问数据库,也不会影响数据库的运行。

这种方式的优点是:

1、后台运行,前台无需等待

2、成功率高,失败的记录会自动重发,直到成功

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
example1.php
Oct 09 PHP
改变Apache端口等配置修改方法
Jun 05 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
PHP session_start()问题解疑(详细介绍)
Jul 05 PHP
实现获取http内容的php函数分享
Feb 16 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
PHP共享内存使用与信号控制实例分析
May 09 #PHP
php curl批处理实现可控并发异步操作示例
May 09 #PHP
php使用curl伪造来源ip和refer的方法示例
May 08 #PHP
PHP+ajax实现获取新闻数据简单示例
May 08 #PHP
PHP 计算两个特别大的整数实例代码
May 07 #PHP
详解PHP发送邮件知识点
May 06 #PHP
PHP学习笔记之session
May 06 #PHP
You might like
PHP编码转换
2012/11/05 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
PHP常用数组函数介绍
2014/07/28 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
js给selected添加options的方法
2015/05/06 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
使用Python编写vim插件的简单示例
2015/04/17 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
python实现视频读取和转化图片
2019/12/10 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
餐饮采购员岗位职责
2014/03/15 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
2015年教师节主持词
2015/07/03 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
关于JavaScript轮播图的实现
2021/11/20 Javascript