Parent

RightAws::Sqs::Queue

Attributes

name[R]
sqs[R]
url[R]

Public Class Methods

create(sqs, url_or_name, create=true, visibility=nil) click to toggle source

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 ... >
# 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
new(sqs, url_or_name) click to toggle source

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

queue = RightAws::Sqs::Queue.new(sqs, 'my_awesome_queue')
# 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

Public Instance Methods

clear(force=false) click to toggle source

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.

# 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) click to toggle source

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

queue.delete(true) #=> true
# File lib/sqs/right_sqs.rb, line 155
def delete(force=false)
  @sqs.interface.delete_queue(@url, force)
end
get_attribute(attribute='All') click to toggle source

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'

# 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) click to toggle source

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('cool_guy@email.address') #=> nil | #<RightAws::Sqs::Grantee:0xb7bf0888 ... >
# 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) click to toggle source

Peeks message body.

queue.peek #=> #<RightAws::Sqs::Message:0xb7bf0884 ... >
# 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
pop() click to toggle source

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

queue.pop #=> #<RightAws::Sqs::Message:0xb7bf0884 ... >
# File lib/sqs/right_sqs.rb, line 209
def pop
  msg = receive
  msg.delete if msg
  msg
end
push(message) click to toggle source
Alias for: send_message
receive(visibility=nil) click to toggle source

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

queue.receive #=> #<RightAws::Sqs::Message:0xb7bf0884 ... >
# 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) click to toggle source

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

queue.receive_messages(2,10) #=> array of messages
# 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) click to toggle source

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

# 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
Also aliased as: push
set_attribute(attribute, value) click to toggle source

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'

# File lib/sqs/right_sqs.rb, line 243
def set_attribute(attribute, value)
  @sqs.interface.set_queue_attributes(@url, attribute, value)
  value
end
size() click to toggle source

Retrieves queue size.

queue.size #=> 1
# File lib/sqs/right_sqs.rb, line 123
def size
  @sqs.interface.get_queue_length(@url)
end
visibility() click to toggle source

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

queue.visibility #=> 30
# File lib/sqs/right_sqs.rb, line 220
def visibility
  @sqs.interface.get_visibility_timeout(@url)
end
visibility=(visibility_timeout) click to toggle source

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

queue.visibility #=> 30
queue.visibility = 33
queue.visibility #=> 33
# File lib/sqs/right_sqs.rb, line 231
def visibility=(visibility_timeout)
  @sqs.interface.set_visibility_timeout(@url, visibility_timeout)
  visibility_timeout
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.