Class: WAZ::Queues::Service
- Inherits:
-
Object
- Object
- WAZ::Queues::Service
- Includes:
- Storage::SharedKeyCoreService
- Defined in:
- lib/waz/queues/service.rb
Overview
This is internally used by the waz-queues part of the gem and it exposes the Windows Azure Queue API REST methods implementation. You can use this class to perform an specific operation that aren’t provided by the current API.
Instance Attribute Summary
Attributes included from Storage::SharedKeyCoreService
#access_key, #account_name, #base_url, #type_of_service, #use_devenv, #use_ssl
Instance Method Summary collapse
-
#clear_queue(queue_name) ⇒ Object
Marks every message on the given queue for deletion.
-
#create_queue(queue_name, metadata = {}) ⇒ Object
Creates a queue on the current storage account.
-
#delete_message(queue_name, message_id, pop_receipt) ⇒ Object
Deletes the given message from the queue, correlating the operation with the pop_receipt in order to avoid eventually inconsistent scenarios.
-
#delete_queue(queue_name) ⇒ Object
Deletes the given queue from the current storage account.
-
#enqueue(queue_name, message_payload, ttl = 604800) ⇒ Object
Enqueues a message on the current queue.
-
#get_messages(queue_name, options = {}) ⇒ Object
Locks N messages (1 default) from the given queue.
-
#get_queue_metadata(queue_name) ⇒ Object
Gets the given queue metadata.
-
#list_queues(options = {}) ⇒ Object
Lists the queues on the given storage account.
-
#peek(queue_name, options = {}) ⇒ Object
Peeks N messages (default 1) from the given queue.
-
#set_queue_metadata(queue_name, metadata = {}) ⇒ Object
Sets the given queue metadata.
Methods included from Storage::SharedKeyCoreService
#canonicalize_headers, #canonicalize_message, #canonicalize_message20090919, #execute, #generate_request, #generate_request_uri, #generate_signature, #generate_signature20090919, #initialize
Instance Method Details
#clear_queue(queue_name) ⇒ Object
Marks every message on the given queue for deletion.
105 106 107 |
# File 'lib/waz/queues/service.rb', line 105 def clear_queue(queue_name) execute :delete, "#{queue_name}/messages", {}, :x_ms_version => '2009-09-19' end |
#create_queue(queue_name, metadata = {}) ⇒ Object
Creates a queue on the current storage account. Throws WAZ::Queues::QueueAlreadyExists when existing metadata and given metadata differ.
33 34 35 36 37 38 39 |
# File 'lib/waz/queues/service.rb', line 33 def create_queue(queue_name, = {}) begin execute :put, queue_name, nil, .merge!(:x_ms_version => '2009-09-19') rescue RestClient::RequestFailed raise WAZ::Queues::QueueAlreadyExists, queue_name if $!.http_code == 409 end end |
#delete_message(queue_name, message_id, pop_receipt) ⇒ Object
Deletes the given message from the queue, correlating the operation with the pop_receipt in order to avoid eventually inconsistent scenarios.
100 101 102 |
# File 'lib/waz/queues/service.rb', line 100 def (queue_name, , pop_receipt) execute :delete, "#{queue_name}/messages/#{}", { :pop_receipt => pop_receipt } end |
#delete_queue(queue_name) ⇒ Object
Deletes the given queue from the current storage account.
42 43 44 |
# File 'lib/waz/queues/service.rb', line 42 def delete_queue(queue_name) execute(:delete, queue_name, {}, {:x_ms_version => '2009-09-19'}) end |
#enqueue(queue_name, message_payload, ttl = 604800) ⇒ Object
Enqueues a message on the current queue.
ttl Specifies the time-to-live interval for the message, in seconds. The maximum time-to-live allowed is 7 days. If this parameter is omitted, the default time-to-live is 7 days.
60 61 62 63 |
# File 'lib/waz/queues/service.rb', line 60 def enqueue(queue_name, , ttl = 604800) payload = "<?xml version=\"1.0\" encoding=\"utf-8\"?><QueueMessage><MessageText>#{}</MessageText></QueueMessage>" execute(:post, "#{queue_name}/messages", { :messagettl => ttl }, { 'Content-Type' => 'application/xml', :x_ms_version => "2009-09-19"}, payload) end |
#get_messages(queue_name, options = {}) ⇒ Object
Locks N messages (1 default) from the given queue.
:num_of_messages option specifies the max number of messages to get (maximum 32)
:visibility_timeout option specifies the timeout of the message locking in seconds (max two hours)
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/waz/queues/service.rb', line 70 def (queue_name, = {}) raise WAZ::Queues::OptionOutOfRange, {:name => :num_of_messages, :min => 1, :max => 32} if (.keys.include?(:num_of_messages) && ([:num_of_messages].to_i < 1 || [:num_of_messages].to_i > 32)) raise WAZ::Queues::OptionOutOfRange, {:name => :visibility_timeout, :min => 1, :max => 7200} if (.keys.include?(:visibility_timeout) && ([:visibility_timeout].to_i < 1 || [:visibility_timeout].to_i > 7200)) content = execute(:get, "#{queue_name}/messages", , {:x_ms_version => "2009-09-19"}) doc = REXML::Document.new(content) = [] REXML::XPath.each(doc, '//QueueMessage/') do |item| = { :message_id => REXML::XPath.first(item, "MessageId").text, :message_text => REXML::XPath.first(item, "MessageText").text, :dequeue_count => REXML::XPath.first(item, "DequeueCount").nil? ? nil : REXML::XPath.first(item, "DequeueCount").text.to_i, :expiration_time => Time.httpdate(REXML::XPath.first(item, "ExpirationTime").text), :insertion_time => Time.httpdate(REXML::XPath.first(item, "InsertionTime").text) } # This are only valid when peek-locking messages [:pop_receipt] = REXML::XPath.first(item, "PopReceipt").text unless REXML::XPath.first(item, "PopReceipt").nil? [:time_next_visible] = Time.httpdate(REXML::XPath.first(item, "TimeNextVisible").text) unless REXML::XPath.first(item, "TimeNextVisible").nil? << end return end |
#get_queue_metadata(queue_name) ⇒ Object
Gets the given queue metadata.
47 48 49 |
# File 'lib/waz/queues/service.rb', line 47 def (queue_name) execute(:head, queue_name, { :comp => 'metadata'}, :x_ms_version => '2009-09-19').headers end |
#list_queues(options = {}) ⇒ Object
Lists the queues on the given storage account.
When the options :include => ‘metadata’ is passed it returns the corresponding metadata for each queue on the listing.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/waz/queues/service.rb', line 12 def list_queues( ={}) content = execute(:get, nil, { :comp => 'list' }.merge!(), { :x_ms_version => "2009-09-19" }) doc = REXML::Document.new(content) queues = [] REXML::XPath.each(doc, '//Queue/') do |item| = {} item.elements['Metadata'].elements.each do |element| .merge!(element.name.gsub(/-/, '_').downcase.to_sym => element.text) end unless item.elements['Metadata'].nil? queues << { :name => REXML::XPath.first(item, "Name").text, :url => REXML::XPath.first(item, "Url").text, :metadata => } end return queues end |
#peek(queue_name, options = {}) ⇒ Object
Peeks N messages (default 1) from the given queue.
Implementation is the same of get_messages but differs on an additional parameter called :peek_only.
94 95 96 |
# File 'lib/waz/queues/service.rb', line 94 def peek(queue_name, = {}) return (queue_name, {:peek_only => true}.merge()) end |
#set_queue_metadata(queue_name, metadata = {}) ⇒ Object
Sets the given queue metadata.
52 53 54 |
# File 'lib/waz/queues/service.rb', line 52 def (queue_name, = {}) execute(:put, queue_name, { :comp => 'metadata' }, .merge!(:x_ms_version => '2009-09-19')) end |