Class: RightAws::Sqs::Queue

Inherits:
Object show all
Defined in:
lib/sqs/right_sqs.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sqs, url_or_name) ⇒ Queue

Creates new Queue instance. Does not create a queue at Amazon.

queue = RightAws::Sqs::Queue.new(sqs, 'my_awesome_queue')


113
114
115
116
117
# File 'lib/sqs/right_sqs.rb', line 113

def initialize(sqs, url_or_name)
  @sqs  = sqs
  @url  = @sqs.interface.queue_url_by_name(url_or_name)
  @name = @sqs.interface.queue_name_by_url(@url)
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



97
98
99
# File 'lib/sqs/right_sqs.rb', line 97

def name
  @name
end

#sqsObject (readonly)

Returns the value of attribute sqs.



97
98
99
# File 'lib/sqs/right_sqs.rb', line 97

def sqs
  @sqs
end

#urlObject (readonly)

Returns the value of attribute url.



97
98
99
# File 'lib/sqs/right_sqs.rb', line 97

def url
  @url
end

Class Method Details

.create(sqs, url_or_name, create = true, visibility = nil) ⇒ Object

Returns Queue instance by queue name. If the queue does not exist at Amazon SQS and create is true, the method creates it.

RightAws::Sqs::Queue.create(sqs, 'my_awesome_queue') #=> #<RightAws::Sqs::Queue:0xb7b626e4 ... >


104
105
106
# File 'lib/sqs/right_sqs.rb', line 104

def self.create(sqs, url_or_name, create=true, visibility=nil)
  sqs.queue(url_or_name, create, visibility)
end

Instance Method Details

#clear(force = false) ⇒ Object

Clears queue. Deletes only the visible messages unless force is true.

queue.clear(true) #=> true

P.S. when force==true the queue deletes then creates again. This is the quickest method to clear a big queue or a queue with ‘locked’ messages. All queue attributes are restored. But there is no way to restore grantees’ permissions to this queue. If you have no grantees except ‘root’ then you have no problems. Otherwise, it’s better to use queue.clear(false).

PS This function is no longer supported. Amazon has changed the SQS semantics to require at least 60 seconds between queue deletion and creation. Hence this method will fail with an exception.



141
142
143
144
145
146
147
# File 'lib/sqs/right_sqs.rb', line 141

def clear(force=false)
##        if force
##          @sqs.interface.force_clear_queue(@url)
##        else
    @sqs.interface.clear_queue(@url)
##        end
end

#delete(force = false) ⇒ Object

Deletes queue. Queue must be empty or force must be set to true. Returns true.

queue.delete(true) #=> true


155
156
157
# File 'lib/sqs/right_sqs.rb', line 155

def delete(force=false)
  @sqs.interface.delete_queue(@url, force)
end

#get_attribute(attribute = 'All') ⇒ Object

Retrieves queue attributes. At this moment Amazon supports VisibilityTimeout and ApproximateNumberOfMessages only. If the name of attribute is set, returns its value. Otherwise, returns a hash of attributes.

queue.get_attribute(‘VisibilityTimeout’) #=> ‘100’



254
255
256
257
# File 'lib/sqs/right_sqs.rb', line 254

def get_attribute(attribute='All')
  attributes = @sqs.interface.get_queue_attributes(@url, attribute)
  attribute=='All' ? attributes : attributes[attribute]
end

#grantees(grantee_email_address = nil, permission = nil) ⇒ Object

Retrieves a list of grantees. Returns an array of Grantee instances if the grantee_email_address is unset. Otherwise returns a Grantee instance that points to grantee_email_address or nil.

grantees = queue.grantees #=> [#<RightAws::Sqs::Grantee:0xb7bf0888 ... >, ...]
 ...
grantee  = queue.grantees('[email protected]') #=> nil | #<RightAws::Sqs::Grantee:0xb7bf0888 ... >


267
268
269
270
271
272
273
274
275
276
277
278
# File 'lib/sqs/right_sqs.rb', line 267

def grantees(grantee_email_address=nil, permission = nil)
  hash = @sqs.interface.list_grants(@url, grantee_email_address, permission)
  grantees = []
  hash.each do |key, value|
    grantees << Grantee.new(self, grantee_email_address, key, value[:name], value[:perms])
  end
  if grantee_email_address
    grantees.blank? ? nil : grantees.shift
  else
    grantees
  end
end

#peek(message_id) ⇒ Object

Peeks message body.

queue.peek #=> #<RightAws::Sqs::Message:0xb7bf0884 ... >


197
198
199
200
201
202
# File 'lib/sqs/right_sqs.rb', line 197

def peek(message_id)
  entry = @sqs.interface.peek_message(@url, message_id)
  msg   = Message.new(self, entry[:id], entry[:body])
  msg.received_at = Time.now 
  msg
end

#popObject

Pops (and deletes) first accessible message from queue. Returns Message instance or nil it the queue is empty.

queue.pop #=> #<RightAws::Sqs::Message:0xb7bf0884 ... >


209
210
211
212
213
# File 'lib/sqs/right_sqs.rb', line 209

def pop
  msg = receive
  msg.delete if msg
  msg
end

#receive(visibility = nil) ⇒ Object

Retrieves first accessible message from queue. Returns Message instance or nil it the queue is empty.

queue.receive #=> #<RightAws::Sqs::Message:0xb7bf0884 ... >


188
189
190
191
# File 'lib/sqs/right_sqs.rb', line 188

def receive(visibility=nil)
  list = receive_messages(1, visibility)
  list.empty? ? nil : list[0]
end

#receive_messages(number_of_messages = 1, visibility = nil) ⇒ Object

Retrieves several messages from queue. Returns an array of Message instances.

queue.receive_messages(2,10) #=> array of messages


174
175
176
177
178
179
180
181
# File 'lib/sqs/right_sqs.rb', line 174

def receive_messages(number_of_messages=1, visibility=nil)
  list = @sqs.interface.receive_messages(@url, number_of_messages, visibility)
  list.map! do |entry|
    msg             = Message.new(self, entry[:id], entry[:body], visibility)
    msg.received_at = Time.now 
    msg
  end
end

#send_message(message) ⇒ Object Also known as: push

Sends new message to queue. Returns new Message instance that has been sent to queue.



161
162
163
164
165
166
# File 'lib/sqs/right_sqs.rb', line 161

def send_message(message)
  message = message.to_s
  msg     = Message.new(self, @sqs.interface.send_message(@url, message), message)
  msg.sent_at = Time.now
  msg
end

#set_attribute(attribute, value) ⇒ Object

Sets new queue attribute value. Not all attributes may be changed: ApproximateNumberOfMessages (for example) is a read only attribute. Returns a value to be assigned to attribute.

queue.set_attribute(‘VisibilityTimeout’, ‘100’) #=> ‘100’ queue.get_attribute(‘VisibilityTimeout’) #=> ‘100’



243
244
245
246
# File 'lib/sqs/right_sqs.rb', line 243

def set_attribute(attribute, value)
  @sqs.interface.set_queue_attributes(@url, attribute, value)
  value
end

#sizeObject

Retrieves queue size.

queue.size #=> 1


123
124
125
# File 'lib/sqs/right_sqs.rb', line 123

def size
  @sqs.interface.get_queue_length(@url)
end

#visibilityObject

Retrieves VisibilityTimeout value for the queue. Returns new timeout value.

queue.visibility #=> 30


220
221
222
# File 'lib/sqs/right_sqs.rb', line 220

def visibility
  @sqs.interface.get_visibility_timeout(@url)
end

#visibility=(visibility_timeout) ⇒ Object

Sets new VisibilityTimeout for the queue. Returns new timeout value.

queue.visibility #=> 30
queue.visibility = 33
queue.visibility #=> 33


231
232
233
234
# File 'lib/sqs/right_sqs.rb', line 231

def visibility=(visibility_timeout)
  @sqs.interface.set_visibility_timeout(@url, visibility_timeout)
  visibility_timeout
end