Returns Queue instance by queue name. If the queue
does not exist at Amazon SQS and create
is true, the method
creates it.
Aws::Sqs::Queue.create(sqs, 'my_awesome_queue') #=> #<Aws::Sqs::Queue:0xb7b626e4 ... >
# File lib/sqs/sqs.rb, line 113 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 = Aws::Sqs::Queue.new(sqs, 'my_awesome_queue')
# File lib/sqs/sqs.rb, line 122 def initialize(sqs, url_or_name) @sqs = sqs @url = @sqs.interface.queue_url_by_name(url_or_name) raise ResourceNotFoundError, "Queue '#{url_or_name}' not found." unless @url @name = @sqs.interface.queue_name_by_url(@url) end
Clears queue, deleting only the visible messages. Any message within its visibility timeout will not be deleted, and will re-appear in the queue in the future when the timeout expires.
To delete all messages in a queue and eliminate the chance of any messages re-appearing in the future, it's best to delete the queue and re-create it as a new queue. Note that doing this will take at least 60 s since SQS does not allow re-creation of a queue within this interval.
queue.clear() #=> true
# File lib/sqs/sqs.rb, line 148 def clear() @sqs.interface.clear_queue(@url) end
Deletes queue. Any messages in the queue will be permanently lost. Returns
true
.
NB: Use with caution; severe data loss is possible!
queue.delete(true) #=> true
# File lib/sqs/sqs.rb, line 159 def delete(force=false) @sqs.interface.delete_queue(@url) 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') #=> {“VisibilityTimeout”=>“45”}
# File lib/sqs/sqs.rb, line 260 def get_attribute(attribute='All') attributes = @sqs.interface.get_queue_attributes(@url, attribute) attribute=='All' ? attributes : attributes[attribute] end
Pops (and deletes) first accessible message from queue. Returns Message instance or nil
if the queue
is empty.
queue.pop #=> #<Aws::Sqs::Message:0xb7bf0884 ... >
# File lib/sqs/sqs.rb, line 207 def pop list = @sqs.interface.pop_messages(@url, 1) return nil if list.empty? entry = list[0] msg = Message.new(self, entry['MessageId'], entry['ReceiptHandle'], entry['Body'], visibility) msg.received_at = Time.now msg.receive_checksum = entry['MD5OfBody'] msg end
Retrieves first accessible message from queue. Returns Message instance or nil
it the queue
is empty.
queue.receive #=> #<Aws::Sqs::Message:0xb7bf0884 ... >
# File lib/sqs/sqs.rb, line 197 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/sqs.rb, line 181 def receive_messages(number_of_messages=1, visibility=nil) list = @sqs.interface.receive_message(@url, number_of_messages, visibility) list.map! do |entry| msg = Message.new(self, entry['MessageId'], entry['ReceiptHandle'], entry['Body'], visibility) msg.received_at = Time.now msg.receive_checksum = entry['MD5OfBody'] msg end end
Sends new message to queue. Returns new Message instance that has been sent to queue.
# File lib/sqs/sqs.rb, line 165 def send_message(message) message = message.to_s res = @sqs.interface.send_message(@url, message) msg = Message.new(self, res['MessageId'], nil, message) msg.send_checksum = res['MD5OfMessageBody'] 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. Currently,
'VisibilityTimeout' is the only settable queue attribute.
Attempting to set non-existent attributes generates an indignant exception.
queue.set_attribute('VisibilityTimeout', '100') #=> '100' queue.get_attribute('VisibilityTimeout') #=> '100'
# File lib/sqs/sqs.rb, line 249 def set_attribute(attribute, value) @sqs.interface.set_queue_attributes(@url, attribute, value) value end
Retrieves queue size.
queue.size #=> 1
# File lib/sqs/sqs.rb, line 133 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/sqs.rb, line 223 def visibility @sqs.interface.get_queue_attributes(@url, 'VisibilityTimeout')['VisibilityTimeout'] end
Sets new VisibilityTimeout
for the queue. Returns new timeout
value.
queue.visibility #=> 30 queue.visibility = 33 queue.visibility #=> 33
# File lib/sqs/sqs.rb, line 234 def visibility=(visibility_timeout) @sqs.interface.set_queue_attributes(@url, 'VisibilityTimeout', visibility_timeout) visibility_timeout end