Overview

Namespaces

  • OpenCloud
    • Autoscale
      • Resource
    • CDN
      • Resource
    • CloudMonitoring
      • Collection
      • Exception
      • Resource
    • Common
      • Collection
      • Constants
      • Exceptions
      • Http
        • Message
      • Log
      • Resource
      • Service
    • Compute
      • Constants
      • Exception
      • Resource
    • Database
      • Resource
    • DNS
      • Collection
      • Resource
    • Identity
      • Constants
      • Resource
    • Image
      • Enum
      • Resource
        • JsonPatch
        • Schema
    • LoadBalancer
      • Collection
      • Enum
      • Resource
    • Networking
      • Resource
    • ObjectStore
      • Constants
      • Enum
      • Exception
      • Resource
      • Upload
    • Orchestration
      • Resource
    • Queues
      • Collection
      • Exception
      • Resource
    • Volume
      • Resource
  • PHP

Classes

  • Claim
  • Message
  • Queue
  • Overview
  • Namespace
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Copyright 2012-2014 Rackspace US, Inc.
  4:  *
  5:  * Licensed under the Apache License, Version 2.0 (the "License");
  6:  * you may not use this file except in compliance with the License.
  7:  * You may obtain a copy of the License at
  8:  *
  9:  * http://www.apache.org/licenses/LICENSE-2.0
 10:  *
 11:  * Unless required by applicable law or agreed to in writing, software
 12:  * distributed under the License is distributed on an "AS IS" BASIS,
 13:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14:  * See the License for the specific language governing permissions and
 15:  * limitations under the License.
 16:  */
 17: 
 18: namespace OpenCloud\Queues\Resource;
 19: 
 20: use Guzzle\Http\Url;
 21: use OpenCloud\Common\PersistentObject;
 22: use OpenCloud\Queues\Exception\DeleteMessageException;
 23: 
 24: /**
 25:  * A message is a task, a notification, or any meaningful data that gets posted
 26:  * to the queue. A message exists until it is deleted by a recipient or
 27:  * automatically by the system based on a TTL (time-to-live) value.
 28:  */
 29: class Message extends PersistentObject
 30: {
 31:     /**
 32:      * @var string
 33:      */
 34:     private $id;
 35: 
 36:     /**
 37:      * The number of seconds since ts, relative to the server's clock.
 38:      *
 39:      * @var int
 40:      */
 41:     private $age;
 42: 
 43:     /**
 44:      * Defines how long a message will be accessible. The message expires after
 45:      * ($ttl - $age) seconds.
 46:      *
 47:      * @var int
 48:      */
 49:     private $ttl = 600;
 50: 
 51:     /**
 52:      * The arbitrary document submitted along with the original request to post
 53:      * the message.
 54:      *
 55:      * @var mixed
 56:      */
 57:     private $body;
 58: 
 59:     /**
 60:      * An opaque relative URI that the client can use to uniquely identify a
 61:      * message resource, and interact with it.
 62:      *
 63:      * @var string
 64:      */
 65:     private $href;
 66: 
 67:     protected static $url_resource = 'messages';
 68:     protected static $json_collection_name = 'messages';
 69:     protected static $json_name = '';
 70: 
 71:     /**
 72:      * Set href (and ID).
 73:      *
 74:      * @param  string $href
 75:      * @return self
 76:      */
 77:     public function setHref($href)
 78:     {
 79:         // We have to extract the ID out of the Href. Nice...
 80:         preg_match('#.+/([\w]+)#', $href, $match);
 81:         if (!empty($match)) {
 82:             $this->setId($match[1]);
 83:         }
 84: 
 85:         $this->href = $href;
 86: 
 87:         return $this;
 88:     }
 89: 
 90:     /**
 91:      * @return string
 92:      */
 93:     public function getHref()
 94:     {
 95:         return $this->href;
 96:     }
 97: 
 98:     public function createJson()
 99:     {
100:         return (object) array(
101:             'ttl'  => $this->getTtl(),
102:             'body' => $this->getBody()
103:         );
104:     }
105: 
106:     public function create($params = array())
107:     {
108:         $this->getLogger()->alert('Please use Queue::createMessage() or Queue::createMessages()');
109: 
110:         return $this->noCreate();
111:     }
112: 
113:     public function update($params = array())
114:     {
115:         return $this->noUpdate();
116:     }
117: 
118:     /**
119:      * This operation immediately deletes the specified message.
120:      *
121:      * @param  string $claimId Specifies that the message should be deleted
122:      *                         only if it has the specified claim ID, and that claim has not expired.
123:      *                         This is useful for ensuring only one agent processes any given
124:      *                         message. Whenever a worker client's claim expires before it has a
125:      *                         chance to delete a message it has processed, the worker must roll
126:      *                         back any actions it took based on that message because another worker
127:      *                         will now be able to claim and process the same message.
128:      *
129:      *      If you do *not* specify $claimId, but the message is claimed, the
130:      *      operation fails. You can only delete claimed messages by providing
131:      *      an appropriate $claimId.
132:      *
133:      * @return bool
134:      * @throws DeleteMessageException
135:      */
136:     public function delete($claimId = null)
137:     {
138:         $url = $this->url(null, array('claim_id' => $claimId));
139:         $this->getClient()
140:             ->delete($url)
141:             ->send();
142: 
143:         return true;
144:     }
145: 
146:     /**
147:      * If this message has been claimed, retrieve the claim id.
148:      *
149:      * @return string
150:      */
151:     public function getClaimIdFromHref()
152:     {
153:         $url = Url::factory($this->href);
154: 
155:         return $url->getQuery()->get('claim_id');
156:     }
157: }
158: 
API documentation generated by ApiGen 2.8.0