Class: AWS::SQS::Client
- Inherits:
-
Object
- Object
- AWS::SQS::Client
- Defined in:
- lib/aws/sqs/client.rb
Constant Summary collapse
- DEFAULT_SQS_OPTIONS =
default options
{ :endpoint => "http://queue.amazonaws.com" }
Instance Attribute Summary collapse
-
#endpoint ⇒ Object
readonly
Returns the value of attribute endpoint.
Instance Method Summary collapse
-
#create_queue(name) ⇒ Object
Create a new queue.
-
#delete_queue(name) ⇒ Object
Delete the specified queue.
-
#initialize(aws_access_key_id, aws_secret_access_key, options = {}) ⇒ Client
constructor
A new instance of Client.
-
#list_queues ⇒ Object
Get an array of queues.
-
#make_request(action, queue = "", params = {}) ⇒ Object
Send a query request and return a SimpleXML object.
Constructor Details
#initialize(aws_access_key_id, aws_secret_access_key, options = {}) ⇒ Client
Returns a new instance of Client.
31 32 33 34 35 |
# File 'lib/aws/sqs/client.rb', line 31 def initialize( aws_access_key_id, aws_secret_access_key, = {} ) @aws_access_key_id, @aws_secret_access_key = aws_access_key_id, aws_secret_access_key opts = DEFAULT_SQS_OPTIONS.merge() @endpoint = opts[:endpoint] end |
Instance Attribute Details
#endpoint ⇒ Object (readonly)
Returns the value of attribute endpoint.
20 21 22 |
# File 'lib/aws/sqs/client.rb', line 20 def endpoint @endpoint end |
Instance Method Details
#create_queue(name) ⇒ Object
Create a new queue
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/aws/sqs/client.rb', line 55 def create_queue(name) params = {} params['QueueName'] = name result = make_request('CreateQueue', queue = "", params) unless result.include?('Error') return AWS::SQS::Queue.new(name, self) else raise Exception, "Amazon SQS Error Code :" + result['Error'][0]['Code'][0] + "\n" + result['Error'][0]['Message'][0] end end |
#delete_queue(name) ⇒ Object
Delete the specified queue
Note: this will delete ALL messages in your queue, so use this function with caution!
73 74 75 76 77 78 79 80 81 |
# File 'lib/aws/sqs/client.rb', line 73 def delete_queue(name) result = make_request('DeleteQueue', queue = name) unless result.include?('Error') return true else raise Exception, "Amazon SQS Error Code :" + result['Error'][0]['Code'][0] + "\n" + result['Error'][0]['Message'][0] end end |
#list_queues ⇒ Object
Get an array of queues
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/aws/sqs/client.rb', line 40 def list_queues() result = make_request('ListQueues') value = result['ListQueuesResult'] puts result.to_s unless value.nil? return value else raise Exception, "Amazon SQS Error Code :" + result['Error'][0]['Code'][0] + "\n" + result['Error'][0]['Message'][0] end end |
#make_request(action, queue = "", params = {}) ⇒ Object
Send a query request and return a SimpleXML object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/aws/sqs/client.rb', line 86 def make_request(action, queue = "", params = {}) # Add Actions params['Action'] = action params['Version'] = '2008-01-01' params['AWSAccessKeyId'] = @aws_access_key_id params['Expires']= (Time.now + 10).gmtime.iso8601 params['SignatureVersion'] = '1' # Sign the string sorted_params = params.sort_by { |key,value| key.downcase } joined_params = sorted_params.collect { |key, value| key + value} string_to_sign = joined_params.to_s digest = OpenSSL::Digest::Digest.new('sha1') hmac = OpenSSL::HMAC.digest(digest, @aws_secret_access_key, string_to_sign) params['Signature'] = Base64.encode64(hmac).chomp # Construct request query = params.collect { |key, value| key + "=" + CGI.escape(value) }.join("&") # Set our query, keeping in mind that most (not all) actions require a queue name in the URI if query["Action"] == "ListQueues" || query["Action"] == "CreateQueue" query = "?" + query else query = "/" + queue + "?" + query end # You should always retry a 5xx error, as some of these are expected retry_count = 0 try_again = true uri = URI.parse(self.endpoint) http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(query) while try_again do # Send Amazon SQS query to endpoint response = http.start { |http| http.request(request) } # Check if we should retry this request if response == Net::HTTPServerError && retry_count <= 5 retry_count ++ sleep(retry_count / 4 * retry_count) else try_again = false xml = response.body.to_s return XmlSimple.xml_in(xml) end end end |