前回、Amazon SQSってなんじゃ?(その1 Scratchpad編)にて、SQSをScratchpadから利用してみましたが、今回はPHPから利用してみます。
○送信側
まずは、メッセージの送信側についてですが、以下のような流れになります。
- 指定したキュー名のキューオブジェクトを作る
- メッセージを送る
それでは、早速コードを書いてみます。
SDKのダウンロードと配置は、Amazon SimpleDBってなんじゃ?(その2 PHP SDK編)と同様なので割愛します。
send_message.php
create_queue($queueName)->body->CreateQueueResult->QueueUrl; //キューURLを指定してメッセージを送ります。 $data = $sqs->send_message($queueURL, 'mamimumemo'); //戻り値から成否を判断します。 if($data->isOK()){ print_r('成功~'); } else{ print_r('失敗~'); } ?>
これだけなので簡単です。
SimpleDBの時よりとてもシンプルです。
○受信側
そして、受信側です。
受信側の流れは、以下が一般的です。
- 指定したキュー名のキューオブジェクトを作る
- メッセージの待機
- メッセージを受け取ったら処理
- メッセージを削除
受信側は送信側と比べて少し特殊で、受信側はメッセージを待機し続ける必要があるため、メモリに常駐したワーカープロセスである場合がほとんどです。
また、待機のためのポーリングなども必要です。
受信側のコードは以下のような形になります。
recieve_message.php
#!/usr/bin/php create_queue($queueName)->body->CreateQueueResult->QueueUrl; //メッセージを待機します while(true){ //メッセージの取得を試みます。 $data = $sqs->receive_message($queueURL); //正常受信 if($data->isOK()){ //メッセージがあったら処理 if(isset($data->body->ReceiveMessageResult->Message)){ //メッセージを取り出します。 $msgdata = $data->body->ReceiveMessageResult->Message; $msg = $msgdata->Body; /* *ここで何か処理を行います。 */ //削除用のポインタを取得します。 $handle = (string)$msgdata->ReceiptHandle; //メッセージを削除します。 $sqs->delete_message($queueURL, $handle); print_r($msg . "n"); } //メッセージがなければ1秒待機します。 else{ sleep(1); } } //受信異常 else{ //エラーを出力します。 print_r($data->body->Error->Message . "n"); } } exit(0); ?>
このPHPのコードはワーカプロセスにするため、コマンドラインからスクリプト起動します。
$ php recieve_message.php
上記のようにSQSはとてもシンプルなサービスですが、SimpleDBなどの他のサービスと合わせて利用することで、様々な用途に使えるため、とても便利です。
こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら