Overview

Namespaces

  • OpenCloud
    • Autoscale
      • Resource
    • CloudMonitoring
      • 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
      • Enum
      • Resource
    • ObjectStore
      • Constants
      • Exception
      • Resource
      • Upload
    • Orchestration
    • Queues
      • Exception
      • Resource
    • Volume
      • Resource
  • PHP

Classes

  • Claim
  • Message
  • Queue
  • Overview
  • Namespace
  • Class
  • Tree
  • Download
  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:     /**
 33:      * @var string
 34:      */
 35:     private $id;
 36: 
 37:     /**
 38:      * The number of seconds since ts, relative to the server's clock.
 39:      *
 40:      * @var int
 41:      */
 42:     private $age;
 43: 
 44:     /**
 45:      * Defines how long a message will be accessible. The message expires after
 46:      * ($ttl - $age) seconds.
 47:      *
 48:      * @var int
 49:      */
 50:     private $ttl = 600;
 51: 
 52:     /**
 53:      * The arbitrary document submitted along with the original request to post
 54:      * the message.
 55:      *
 56:      * @var mixed
 57:      */
 58:     private $body;
 59: 
 60:     /**
 61:      * An opaque relative URI that the client can use to uniquely identify a
 62:      * message resource, and interact with it.
 63:      *
 64:      * @var string
 65:      */
 66:     private $href;
 67: 
 68:     protected static $url_resource = 'messages';
 69:     protected static $json_collection_name = 'messages';
 70:     protected static $json_name = '';
 71: 
 72:     /**
 73:      * Set href (and ID).
 74:      *
 75:      * @param  string $href
 76:      * @return self
 77:      */
 78:     public function setHref($href)
 79:     {
 80:         // We have to extract the ID out of the Href. Nice...
 81:         preg_match('#.+/([\w\d]+)\?claim_id\=.+$#', $href, $match);
 82:         if (!empty($match)) {
 83:             $this->setId($match[1]);
 84:         }
 85: 
 86:         $this->href = $href;
 87: 
 88:         return $this;
 89:     }
 90: 
 91:     /**
 92:      * @return string
 93:      */
 94:     public function getHref()
 95:     {
 96:         return $this->href;
 97:     }
 98: 
 99:     public function createJson()
100:     {
101:         return (object) array(
102:             'ttl'  => $this->getTtl(),
103:             'body' => $this->getBody()
104:         );
105:     }
106: 
107:     public function create($params = array())
108:     {
109:         $this->getLogger()->alert('Please use Queue::createMessage() or Queue::createMessages()');
110: 
111:         return $this->noCreate();
112:     }
113: 
114:     public function update($params = array())
115:     {
116:         return $this->noUpdate();
117:     }
118: 
119:     /**
120:      * This operation immediately deletes the specified message.
121:      *
122:      * @param  string $claimId Specifies that the message should be deleted
123:      *                         only if it has the specified claim ID, and that claim has not expired.
124:      *                         This is useful for ensuring only one agent processes any given
125:      *                         message. Whenever a worker client's claim expires before it has a
126:      *                         chance to delete a message it has processed, the worker must roll
127:      *                         back any actions it took based on that message because another worker
128:      *                         will now be able to claim and process the same message.
129:      *
130:      *      If you do *not* specify $claimId, but the message is claimed, the
131:      *      operation fails. You can only delete claimed messages by providing
132:      *      an appropriate $claimId.
133:      *
134:      * @return bool
135:      * @throws DeleteMessageException
136:      */
137:     public function delete($claimId = null)
138:     {
139:         $url = $this->url(null, array('claim_id' => $claimId));
140:         $this->getClient()
141:             ->delete($url)
142:             ->send();
143: 
144:         return true;
145:     }
146: 
147:     /**
148:      * If this message has been claimed, retrieve the claim id.
149:      *
150:      * @return string
151:      */
152:     public function getClaimIdFromHref()
153:     {
154:         $url = Url::factory($this->href);
155: 
156:         return $url->getQuery()->get('claim_id');
157:     }
158: }
159: 
PHP OpenCloud API API documentation generated by ApiGen 2.8.0