PHP加MySQL消息队列深入理解

 更新时间:2021年02月27日 15:42:55   作者:PHP开发社区  
这篇文章主要介绍了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消息队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 6个超实用的PHP代码片段

    6个超实用的PHP代码片段

    这篇文章主要介绍了10个超实用的PHP代码样例:黑名单过滤、随机颜色生成器、从网上下载文件、强制下载文件、截取图片、检查网站是否宕机,需要的朋友可以参考下
    2015-08-08
  • 深入分析php之面向对象

    深入分析php之面向对象

    本篇文章是对php中的面向对象进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 在WordPress的文章编辑器中设置默认内容的方法

    在WordPress的文章编辑器中设置默认内容的方法

    这篇文章主要介绍了在WordPress的文章编辑器中设置默认内容的方法,包括给不同类型的文章设置不同内容的具体方法,需要的朋友可以参考下
    2015-12-12
  • 在WordPress中安装使用视频播放器插件Hana Flv Player

    在WordPress中安装使用视频播放器插件Hana Flv Player

    这篇文章主要介绍了在WordPress中安装使用播放器插件Hana Flv Player的方法,包括其简单的代码控制,需要的朋友可以参考下
    2016-01-01
  • PHP生成带有雪花背景的验证码

    PHP生成带有雪花背景的验证码

    晚看到了chianren上的验证码效果,就考虑了一下,用PHP的GD库完成了类似功能 先成生背景,再把生成的验证码放上去
    2008-09-09
  • Yii框架中jquery表单验证插件用法示例

    Yii框架中jquery表单验证插件用法示例

    这篇文章主要介绍了Yii框架中jquery表单验证插件用法,结合实例形式分析了Yii框架中使用jquery表单验证插件进行手机、邮箱等输入信息验证的相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • php加密算法之实现可逆加密算法和解密分享

    php加密算法之实现可逆加密算法和解密分享

    对于大部分密码加密,我们可以采用md5、sha1等方法。可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密。对于需要还原的信息,则需要采用可逆的加密解密算法,下面一组PHP函数是实现此加密解密的方法
    2014-01-01
  • CodeIgniter常用知识点小结

    CodeIgniter常用知识点小结

    这篇文章主要介绍了CodeIgniter常用知识点,包括跳转、常量定义、语言设置及支持get方法传参等技巧,需要的朋友可以参考下
    2016-05-05
  • PHP连接MYSQL数据库的3种常用方法

    PHP连接MYSQL数据库的3种常用方法

    这篇文章主要介绍了PHP连接MYSQL数据库的3种常用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • php设计模式之策略模式实例分析【星际争霸游戏案例】

    php设计模式之策略模式实例分析【星际争霸游戏案例】

    这篇文章主要介绍了php设计模式之策略模式,结合星际争霸游戏案例形式分析了php策略模式相关原理、用法及操作注意事项,需要的朋友可以参考下
    2020-03-03

最新评论