AWSのSQS(Simple Queue Service)をPHPから操作してみたときのサンプル。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
<?php require_once './aws/aws-autoloader.php'; use Aws¥Sqs¥SqsClient; use Aws¥Exception¥AwsException; //SQSのURL。管理画面に記載されている。 define('QUEUE_URL', 'https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxxxxx/your-queue-name'); //キューの送信テスト function send() { //事前にkeyとsecretを用意しておく。 $client = new SqsClient([ 'region' => 'ap-northeast-1', 'version' => 'latest', 'credentials' => [ 'key' => 'xxxxx', 'secret' => 'xxxxx', ], ]); //- もちろん、MessageAttributesなしのシンプルなメッセージでもOK。 $params = [ 'DelaySeconds' => 10, 'MessageAttributes' => [ "テストキー1" => [ 'DataType' => "String", 'StringValue' => "テストテスト" ], "TestKey2" => [ 'DataType' => "String", 'StringValue' => "test value2" ], "数値" => [ 'DataType' => "Number", 'StringValue' => "123" ] ], 'MessageBody' => "送信テスト:".date('Y-m-d H:i:s'), 'QueueUrl' => QUEUE_URL ]; try { $client->sendMessage($params); } catch (AwsException $e) { echo $e->getMessage(); } } //キューの受信テスト //- 必ずしもMaxNumberOfMessagesの分受け取れるわけではない。 //- 可視性タイムアウトに設定した時間は、見えなくなる。 function receive() { //事前にkeyとsecretを用意しておく。 $client = new SqsClient([ 'region' => 'ap-northeast-1', 'version' => 'latest', 'credentials' => [ 'key' => 'xxxxx', 'secret' => 'xxxxx', ], ]); try { $result = $client->receiveMessage([ 'AttributeNames' => ['All'], 'MaxNumberOfMessages' => 10, //必ずしも10個来るわけではない。 'MessageAttributeNames' => ['All'], 'QueueUrl' => QUEUE_URL, 'WaitTimeSeconds' => 0, ]); //メッセージを取得。 $messages = $result->get('Messages'); if (count($messages) == 0) { echo "No messages¥n"; return; } var_dump($messages); //本文を取得。 $bodies = []; foreach ($messages as $message) { $bodies[] = $message['Body']; } var_dump($bodies); //キューの削除。 foreach ($messages as $message) { //削除する場合は、ReceiptHandleを指定する。この値は、同じメッセージでも、受信するごとに違うので注意。 $result = $client->deleteMessage([ 'QueueUrl' => QUEUE_URL, 'ReceiptHandle' => $message['ReceiptHandle'], ]); } } catch (AwsException $e) { echo $e->getMessage(); } } |
コメント