今まで、可用性を高める手段の一つとして、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)