Services_Amazon_SQS
[ class tree: Services_Amazon_SQS ] [ index: Services_Amazon_SQS ] [ all elements ]

Source for file QueueManager.php

Documentation is available at QueueManager.php

  1. <?php
  2.  
  3. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  4.  
  5. /**
  6.  * Contains a class for creating, managing, and deleting Amazon Simple Queue
  7.  * Service (SQS) queues
  8.  *
  9.  * PHP version 5
  10.  *
  11.  * LICENSE:
  12.  *
  13.  * Copyright 2008 Mike Brittain, silverorange
  14.  *
  15.  * Licensed under the Apache License, Version 2.0 (the "License");
  16.  * you may not use this file except in compliance with the License.
  17.  * You may obtain a copy of the License at
  18.  *
  19.  *   http://www.apache.org/licenses/LICENSE-2.0
  20.  *
  21.  * Unless required by applicable law or agreed to in writing, software
  22.  * distributed under the License is distributed on an "AS IS" BASIS,
  23.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  24.  * See the License for the specific language governing permissions and
  25.  * limitations under the License.
  26.  *
  27.  * @category  Services
  28.  * @package   Services_Amazon_SQS
  29.  * @author    Mike Brittain <mike@mikebrittain.com>
  30.  * @author    Michael Gauthier <mike@silverorange.com>
  31.  * @copyright 2008 Mike Brittain, 2008 silverorange
  32.  * @license   http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
  33.  * @version   CVS: $Id: QueueManager.php 282616 2009-06-23 03:15:29Z gauthierm $
  34.  * @link      http://pear.php.net/package/Services_Amazon_SQS
  35.  * @link      http://aws.amazon.com/sqs/
  36.  * @link      http://s3.amazonaws.com/awsdocs/SQS/20080101/sqs-dg-20080101.pdf
  37.  */
  38.  
  39. /**
  40.  * Amazon SQS client base class.
  41.  */
  42. require_once 'Services/Amazon/SQS.php';
  43.  
  44. /**
  45.  * Queue class.
  46.  */
  47. require_once 'Services/Amazon/SQS/Queue.php';
  48.  
  49. /**
  50.  * Class for creating, managing, and deleting Amazon Simple Queue Service
  51.  * (SQS) queues
  52.  *
  53.  * @category  Services
  54.  * @package   Services_Amazon_SQS
  55.  * @author    Mike Brittain <mike@mikebrittain.com>
  56.  * @author    Michael Gauthier <mike@silverorange.com>
  57.  * @copyright 2008 Mike Brittain, 2008 silverorange
  58.  * @license   http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
  59.  * @link      http://pear.php.net/package/Services_Amazon_SQS
  60.  * @link      http://aws.amazon.com/sqs/
  61.  * @link      http://s3.amazonaws.com/awsdocs/SQS/20080101/sqs-dg-20080101.pdf
  62.  */
  63. {
  64.     // {{{ listQueues()
  65.  
  66.     /**
  67.      * Gets a list of SQS queues for the current account
  68.      *
  69.      * @param string $prefix optional. Only list queues whose name begins with
  70.      *                        the given prefix. If not specified, all queues for
  71.      *                        the account are returned.
  72.      *
  73.      * @return array an array of {@link Services_Amazon_SQS_Queue} objects.
  74.      *
  75.      * @throws Services_Amazon_SQS_ErrorException if one or more errors are
  76.      *          returned by Amazon.
  77.      *
  78.      * @throws Services_Amazon_SQS_HttpException if the HTTP request fails.
  79.      */
  80.     public function listQueues($prefix = null)
  81.     {
  82.         $params = array();
  83.  
  84.         $params['Action''ListQueues';
  85.  
  86.         if ($prefix{
  87.             $params['QueueNamePrefix'$prefix;
  88.         }
  89.  
  90.         $response $this->sendRequest($params);
  91.  
  92.         // get queues from response
  93.         $queues = array();
  94.         $xpath  $response->getXPath();
  95.         $nodes  $xpath->query('//sqs:QueueUrl');
  96.  
  97.         foreach ($nodes as $node{
  98.             $url   $xpath->evaluate('string(text())'$node);
  99.             $queue = new Services_Amazon_SQS_Queue($url$this->account'',
  100.                 $this->request);
  101.  
  102.             $queues[$queue;
  103.         }
  104.  
  105.         return $queues;
  106.     }
  107.  
  108.     // }}}
  109.     // {{{ createQueue()
  110.  
  111.     /**
  112.      * Creates a new queue for the current account
  113.      *
  114.      * @param string  $name    the queue name.
  115.      * @param integer $timeout optional. Timeout for message visibility.
  116.      *
  117.      * @return Services_Amazon_SQS_Queue the new queue object or false if the
  118.      *          queue could not be created.
  119.      *
  120.      * @throws Services_Amazon_SQS_InvalidQueueException if the queue name is
  121.      *          not a valid queue name, if the queue was recently deleted or if
  122.      *          the queue already exists and the visibility timeout value
  123.      *          differs from the value on the existing queue.
  124.      *
  125.      * @throws Services_Amazon_SQS_InvalidTimeoutException if the provided
  126.      *          <kbd>$timeout</kbd> is not in the valid range.
  127.      *
  128.      * @throws Services_Amazon_SQS_ErrorException if one or more errors are
  129.      *          returned by Amazon.
  130.      *
  131.      * @throws Services_Amazon_SQS_HttpException if the HTTP request fails.
  132.      */
  133.     public function createQueue($name$timeout = null)
  134.     {
  135.         if (!$this->isValidQueueName($name)) {
  136.             throw new Services_Amazon_SQS_InvalidQueueException('The queue ' .
  137.                 'name "' $name '" is not a valid queue name. Queue names ' .
  138.                 'must be 1-80 characters long and must consist only of ' .
  139.                 'alphanumeric characters, dashes or underscores.'0$name);
  140.         }
  141.  
  142.         if ($timeout !== null && !$this->isValidVisibilityTimeout($timeout)) {
  143.             throw new Services_Amazon_SQS_InvalidTimeoutException('The ' .
  144.                 'specified timeout falls outside the allowable range (0-7200)',
  145.                 0$timeout);
  146.         }
  147.  
  148.         $params = array();
  149.  
  150.         $params['Action']    'CreateQueue';
  151.         $params['QueueName'$name;
  152.  
  153.         $params['DefaultVisibilityTimeout']
  154.             = ($timeout !== null$timeout : 30;
  155.  
  156.         try {
  157.             $response $this->sendRequest($params);
  158.         catch (Services_Amazon_SQS_ErrorException $e{
  159.             switch ($e->getError()) {
  160.             case 'AWS.SimpleQueueService.QueueDeletedRecently':
  161.                 throw new Services_Amazon_SQS_InvalidQueueException('The ' .
  162.                     'queue "' $name '" was deleted recently. Please wait ' .
  163.                     '60 seconds after deleting a queue before creating a ' .
  164.                     'queue of the same name.'0$name);
  165.  
  166.             case 'QueueAlreadyExists':
  167.                 throw new Services_Amazon_SQS_InvalidQueueException('The ' .
  168.                     'queue "' $name '" already exists. To set a ' .
  169.                     'different visibility timeout, use the ' .
  170.                     'Services_Amazon_SQS_Queue::setAttribute() method.',
  171.                     0$name);
  172.  
  173.             default:
  174.                 throw $e;
  175.             }
  176.         }
  177.  
  178.         $xpath    $response->getXPath();
  179.         $queueUrl $xpath->evaluate('string(//sqs:QueueUrl/text())');
  180.  
  181.         $queue = new Services_Amazon_SQS_Queue($queueUrl$this->account'',
  182.             $this->request);
  183.  
  184.         return $queue;
  185.     }
  186.  
  187.     // }}}
  188.     // {{{ deleteQueue()
  189.  
  190.     /**
  191.      * Deletes a queue
  192.      *
  193.      * All existing messages in the queue will be lost.
  194.      *
  195.      * @param Services_Amazon_SQS_Queue|string$queue either a queue object or
  196.      *                                                 the queue URL of the
  197.      *                                                 queue to be deleted.
  198.      *
  199.      * @return void 
  200.      *
  201.      * @throws Services_Amazon_SQS_ErrorException if one or more errors are
  202.      *          returned by Amazon.
  203.      *
  204.      * @throws Services_Amazon_SQS_HttpException if the HTTP request fails.
  205.      */
  206.     public function deleteQueue($queue)
  207.     {
  208.         if ($queue instanceof Services_Amazon_SQS_Queue{
  209.             $queue strval($queue);
  210.         }
  211.  
  212.         $params = array();
  213.  
  214.         $params['Action''DeleteQueue';
  215.  
  216.         $this->sendRequest($params$queue);
  217.     }
  218.  
  219.     // }}}
  220.     // {{{ isValidQueueName()
  221.  
  222.     /**
  223.      * Gets whether or not a queue name is valid for Amazon SQS
  224.      *
  225.      * Amazon SQS queue names must conform to the following rules:
  226.      * - must be 1 to 80 ASCII characters
  227.      * - must contain only alphanumeric characters, dashes (-), and
  228.      *   underscores (_).
  229.      *
  230.      * @param string $name the queue name to check.
  231.      *
  232.      * @return boolean true if the provided queue name is a valid SQS queue
  233.      *                  name, otherwise false.
  234.      */
  235.     protected function isValidQueueName($name)
  236.     {
  237.         $valid = true;
  238.  
  239.         if (preg_match('/^[A-Za-z0-9\-\_]{1,80}$/'$name=== 0{
  240.             $valid = false;
  241.         }
  242.  
  243.         return $valid;
  244.     }
  245.  
  246.     // }}}
  247. }
  248.  
  249. ?>

Documentation generated on Tue, 24 Nov 2009 17:00:04 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.