PHP加MySQL消息队列深入理解

admin3年前PHP教程69

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

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

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


需要注意的是,由于数据写入消息队列后立即返回给用户数据在后续的业务校验、写数据库等操作可能失败,因此在使用消息队列进行业务异步处理后,需要适当修改业务流程进行配合,如订单提交后,订单数据写入消息队列,不能立即返回用户订单提交成功,需要在消息队列的订单消费者进程真正处理完该订单,甚至商品出库后,再通过电子邮件或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消息队列内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

GPU服务器的用处有什么?租用江西GPU服务器如何使用?

GPU服务器是基于GPU功能的视频编解码、深度学习、科学计算等多种场景的快速、稳定、弹性的计算服务,提供和标准云服务器一致的管理方式。出色的图形处理能力和高性能计算能力提供极致计算性能,有效解放计算压...

网络被攻击了怎么办?租用美国BGP高防物理机哪家好?

主流的服务器攻击方式有多种手段,但是唯独DDoS攻击、CC攻击以及ARP欺骗,这些攻击方式被称为三大攻击手段,不仅可以致使服务器瘫痪,而且还很无解。DDOS攻击DDoS攻击全名叫做分布式拒绝服务(DD...

PHP 502 bad gateway原因及解决方案

nginx+php 出现502 bad gateway,一般这都不是nginx的问题,而是由于 fastcgi或者php的问题导致的,常见的有以下几种。1. php.ini 的memory_limit...

PHP 对接美团大众点评团购券(门票)的开发步骤

一、功能简要介绍    1、根据需求,用户在美团大众点评中所购买的门票在自己的系统上可以核销,同时把核销信息存储到自己的系统里。   2、美团点评api文档地址...

PHP解决输出中文乱码问题讲解

解决 php 输出中文乱码的问题问题描述今天给导航狗(daohanggou/)的 php 程序和数据库文件迁移了服务器, 但是迁移到新的服务器上之后 php 输出的中文和 php 输出的从 mysql...

游戏服务器被攻击如何防御?租用美国BGP高防服务器价格是多少?

游戏服务器在现如今电子竞技发达的今天越发火爆,但是被攻击也是很常见的,特别是游戏新上线时,都要承受的住外来压力,玩家数量的激增,被黑客攻击等等。在这里我来说说游戏服务器为什么老被攻击和怎么防御恶意攻击...