今まで、可用性を高める手段の一つとして、S3の実用化に注力してきましたが、SQSやSimpleDBにも手を出していくことにしました。

はじめにSQSを利用してみたいと思います。言語はいつもの通り、PHP(AWS SDK)です。

まずはキューの作成ですが、下記のようなコードで出来てしまいました。

require_once("/opt/aws/php/sdk.class.php");
define("AWS_KEY"       , "AAAAAAAA");
define("AWS_SECRET_KEY", "SSSSSSSS");
$sqs = new AmazonSQS();
$sqs->set_region(AmazonSQS::REGION_APAC_NE1);
$response = $sqs->create_queue("suz-lab-queue");
var_dump($response->body->CreateQueueResult->QueueUrl);

実行結果は下記のようになります。後ほど、処理で必要なためQueueUrlはメモしておきましょう。

# ./create-queue.php
object(CFSimpleXML)#7 (1) {
  [0]=>
  string(67) "https://sqs.ap-northeast-1.amazonaws.com/811118151095/suz-lab-queue"
}

次に、メッセージを送るコードは下記のようになります。
send_messageメソッド実行時に、上記のQueueUrlと送信したいメッセージを引数にします。

require_once("/opt/aws/php/sdk.class.php");
define("AWS_KEY"       , "AAAAAAAA");
define("AWS_SECRET_KEY", "SSSSSSSS");
$url = "https://sqs.ap-northeast-1.amazonaws.com/811118151095/suz-lab-queue";
$sqs = new AmazonSQS();
$sqs->set_region(AmazonSQS::REGION_APAC_NE1);
$response = $sqs->send_message($url, $argv[1]);
var_dump($response->isOK());

ちなみに実行結果は下記のようになり、メッセージがキューに溜まったはずです。

# ./send-message.php suz-lab-1
bool(true)

最後にメッセージの取得ですが、コードは下記のようになります。
こちらもreceive_messageメソッド実行時に、上記のQueueUrlを引数としています。
また、同時にメッセージの削除もしているのですが、
delete_messageメソッド実行時にQueueUrlはもちろん、
取得したメッセージのReceiptHandleも引数に必要になるので注意が必要です。

require_once("/opt/aws/php/sdk.class.php");
define("AWS_KEY"       , "AAAAAAAA");
define("AWS_SECRET_KEY", "SSSSSSSS");
$url = "https://sqs.ap-northeast-1.amazonaws.com/811118151095/suz-lab-queue";
$sqs = new AmazonSQS();
$response = $sqs->receive_message($url);
$receipt_handle = $response->body->ReceiveMessageResult->Message->ReceiptHandle;
var_dump($response->body->ReceiveMessageResult->Message->Body);
$response = $sqs->delete_message($url, $receipt_handle);
var_dump($response->isOK());

実行してみると下記のように、無事、メッセージが取得できていることが確認できます。

# ./receive-message.php
object(CFSimpleXML)#3 (1) {
  [0]=>
  string(5) "test1"
}
bool(true)

こちら の記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら