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
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
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
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
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
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
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
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
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
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
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
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
Retrieves queue size.
queue.size #=> 1
# File lib/sqs/right_sqs.rb, line 123 def size @sqs.interface.get_queue_length(@url) end
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
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