2011年6月21日火曜日

PHPでSQS

スズキです。

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

次はSimpleDBとの連携も...
--------
http://www.suz-lab.com

0 コメント: