今まで、可用性を高める手段の一つとして、S3の実用化に注力してきましたが、SQSやSimpleDBにも手を出していくことにしました。
はじめにSQSを利用してみたいと思います。言語はいつもの通り、PHP(AWS SDK)です。
まずはキューの作成ですが、下記のようなコードで出来てしまいました。
1 2 3 4 5 6 7 | 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はメモしておきましょう。
1 2 3 4 5 | # ./create-queue.php object(CFSimpleXML) #7 (1) { [0]=> string(67) "https://sqs.ap-northeast-1.amazonaws.com/811118151095/suz-lab-queue" } |
次に、メッセージを送るコードは下記のようになります。
send_messageメソッド実行時に、上記のQueueUrlと送信したいメッセージを引数にします。
1 2 3 4 5 6 7 8 | 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()); |
ちなみに実行結果は下記のようになり、メッセージがキューに溜まったはずです。
1 2 | # ./send-message.php suz-lab-1 bool( true ) |
最後にメッセージの取得ですが、コードは下記のようになります。
こちらもreceive_messageメソッド実行時に、上記のQueueUrlを引数としています。
また、同時にメッセージの削除もしているのですが、
delete_messageメソッド実行時にQueueUrlはもちろん、
取得したメッセージのReceiptHandleも引数に必要になるので注意が必要です。
01 02 03 04 05 06 07 08 09 10 | 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()); |
実行してみると下記のように、無事、メッセージが取得できていることが確認できます。
1 2 3 4 5 6 | # ./receive-message.php object(CFSimpleXML) #3 (1) { [0]=> string(5) "test1" } bool( true ) |