zoukankan      html  css  js  c++  java
  • 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、成功率高,失败的记录会自动重发,直到成功

  • 相关阅读:
    HDU 4778 内存搜索&amp;如压力
    cocos2dx-2.x CCFileUtils文件管理分析(2)
    开源 自由 java CMS
    1.网络工具:ifconfig,ping,netstate,Redhat命令和图形化设置ip,finger,nslookup
    什么是PV,UV。
    Python爬虫框架Scrapy获得定向打击批量招聘信息
    采用ToolRunner执行Hadoop基本面分析程序
    编辑时snapping的添加
    利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用
    由图层判断数据源类型
  • 原文地址:https://www.cnblogs.com/xiezhi/p/5546893.html
Copyright © 2011-2022 走看看