PHPとMySQL実装メッセージキュー
最近、メールを大量に送信する需要があり、メールインタフェースはサードパーティが提供しています.最初に思いついたのですが、携帯番号を取得してから、インタフェースをループして送ればいいのではないでしょうか.
しかし、すぐに問題を発見しました.メールの数が多い場合、時間がかかるだけでなく、成功率も低いです.
そこで、PHPとMySQLでメッセージキューを実現し、メールを1本ずつ送信したいと思いました.具体的な実装方法について説明します.
まず、次のフィールドを含むデータテーブルsmsを作成します.
送信するメールと携帯電話番号をsmsテーブルに格納します.
次に、PHPでタイマーを実現し、定期的に記録を読み取り、メールを送信する必要があります.
コードをtimer_として保存sms.php、コマンドラインを開き、タイマを実行します.
はい、phpタイマーは設定した時間間隔(ここでは10秒)に基づいて、メールを送信するタスクを自動的に完了します.タスクが完了すると、タイマーを自動的に終了し、サーバリソースを占有しません.
私のテストによると、PHPタイマーはリソースを多く消費しておらず、サーバに圧力をかけません.また、非同期でデータベースにアクセスしても、データベースの実行には影響しません.
この方法の利点は次のとおりです.
1、バックグラウンド運行、フロントは待つ必要がない
2、成功率が高く、失敗した記録は自動的に再送信され、成功するまで
しかし、すぐに問題を発見しました.メールの数が多い場合、時間がかかるだけでなく、成功率も低いです.
そこで、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、成功率が高く、失敗した記録は自動的に再送信され、成功するまで