PHPとMySQL実装メッセージキュー

1308 ワード

最近、メールを大量に送信する需要があり、メールインタフェースはサードパーティが提供しています.最初に思いついたのですが、携帯番号を取得してから、インタフェースをループして送ればいいのではないでしょうか.
しかし、すぐに問題を発見しました.メールの数が多い場合、時間がかかるだけでなく、成功率も低いです.
そこで、PHPとMySQLでメッセージキューを実現し、メールを1本ずつ送信したいと思いました.具体的な実装方法について説明します.
まず、次のフィールドを含むデータテーブル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、成功率が高く、失敗した記録は自動的に再送信され、成功するまで