Class: RightScale::CloudApi::AWS::SQS::Manager

Inherits:
CloudApi::Manager
  • Object
show all
Defined in:
lib/cloud/aws/sqs/manager.rb

Overview

Amazon Simple Queue Service (SQS) compatible manager (thread safe).

When Amazon API expects Queue to be a part of a path then put the name as first parameter:

Examples:

require "right_aws_api"

# Create a manager
sqs = RightScale::CloudApi::AWS::SQS::Manager.new(
        ENV['AWS_ACCESS_KEY_ID'],
        ENV['AWS_SECRET_ACCESS_KEY'],
        ENV['AWS_ACCOUNT_NUMBER'],
        'https://sqs.us-east-1.amazonaws.com')

# List all queues
sqs.ListQueues #=>
  {"ListQueuesResponse"=>
    {"ResponseMetadata"=>{"RequestId"=>"9db0c9d7-35cf-4477-bc13-bbeacaf16d9b"},
     "@xmlns"=>"http://queue.amazonaws.com/doc/2011-10-01/",
     "ListQueuesResult"=>
      {"QueueUrl"=>
         ["https://sqs.us-east-1.amazonaws.com/826693181925/Abracadabra",
          "https://sqs.us-east-1.amazonaws.com/826693181925/JM-Output"] }}}
# Create new queue (Amazon way)...
sqs.CreateQueue( 'QueueName'         => 'myCoolQueue',
                 'Attribute.1.Name'  => 'VisibilityTimeout',
                 'Attribute.1.Value' => '40',
                 'Attribute.2.Name'  => 'MaximumMessageSize',
                 'Attribute.2.Value' => '2048' )

# ... or using CloudApi way:
sqs.CreateQueue( 'QueueName' => 'myCoolQueue',
                 'Attribute' => [
                   { 'Name'  => 'VisibilityTimeout',  'Value' => 40 },
                   { 'Name'  => 'MaximumMessageSize', 'Value' => 2048 } ])
  {"CreateQueueResponse"=>
    {"CreateQueueResult"=>
      {"QueueUrl"=>
        "https://sqs.us-east-1.amazonaws.com/826693181925/myCoolQueue1"},
     "ResponseMetadata"=>{"RequestId"=>"bf32f187-00e2-4327-8207-9aa6f786c654"},
     "@xmlns"=>"http://queue.amazonaws.com/doc/2011-10-01/"}}
# sqs.GetQueueAttributes('myCoolQueue', 'AttributeName' => ['VisibilityTimeout', 'MaximumMessageSize', 'ApproximateNumberOfMessages']) #=>
  {"GetQueueAttributesResponse"=>
    {"@xmlns"=>"http://queue.amazonaws.com/doc/2011-10-01/",
     "GetQueueAttributesResult"=>
      {"Attribute"=>
        [{"Name"=>"VisibilityTimeout", "Value"=>"40"},
         {"Name"=>"MaximumMessageSize", "Value"=>"2048"},
         {"Name"=>"ApproximateNumberOfMessages", "Value"=>"0"}]},
     "ResponseMetadata"=>{"RequestId"=>"f70ca08f-97d6-4787-856d-e447529c6a26"}}}
# Send message (do not forget to escape it)
message = 'A big brown dog jumped over the fox'
sqs.SendMessage('myCoolQueue1', 'MessageBody' => URI::escape(message)) #=>
  {"SendMessageResponse"=>
    {"ResponseMetadata"=>{"RequestId"=>"df903a9d-8409-421d-9ca4-2ccdaf3a38b3"},
     "SendMessageResult"=>
      {"MessageId"=>"462df5b0-a7f9-40af-8951-b47ec664cfd9",
       "MD5OfMessageBody"=>"cf16267845abfaaa6297db494b2c90e8"},
     "@xmlns"=>"http://queue.amazonaws.com/doc/2011-10-01/"}}
# Receive message (then unescape it when needed)
sqs.ReceiveMessage('myCoolQueue') #=> 
   {"ReceiveMessageResponse"=>
     {"ReceiveMessageResult"=>
       {"Message"=>
         {"ReceiptHandle"=>
           "Prl0vft3nRgHmktg983Id8/3NhzTWnxZAtOv0Jr3qdfKsqBR68Pl4basOMqgGO3jF2yeAcI4nKhmtDuS7jqOpBE7mbdwfiUFDn55yssPQWcaxxjGVWeu+p45YGxn2aqU6fh4OnTDebUWsBLCPSc9uf+cRuJOwodzeVVT1XUKYxlnwvZJa2qD17wfitoJp5F/lFy4yU0GaDP4VF5icb/AfzxYuO7kg0p9Cswf0pPkWYgV+BOe9Ri0GELw4YkTLMInHk93NtdcWtgM51zbmwDDhOQDIQdfkcKw1z9OdHsr1+4=",
          "Body"=>"A%20big%20brown%20dog%20jumped%20over%20the%20fox",
          "MD5OfBody"=>"a1bb5681fa24d4f437eeba5a1dd305c1",
          "MessageId"=>"71ba4c68-54c9-4ae2-a272-626a6905593b"}},
      "ResponseMetadata"=>{"RequestId"=>"c77ab769-ff74-4fdb-ab86-fb9219ab3e0c"},
      "@xmlns"=>"http://queue.amazonaws.com/doc/2011-10-01/"}}
# Send message batch (Amazon way) ...
sqs.SendMessageBatch('myCoolQueue',
  'SendMessageBatchRequestEntry.1.Id'           => 1,
  'SendMessageBatchRequestEntry.1.DelaySeconds' => 300,
  'SendMessageBatchRequestEntry.1.MessageBody'  => CGI::escape('Hahaha!'),
  'SendMessageBatchRequestEntry.2.Id'           => 2,
  'SendMessageBatchRequestEntry.2.DelaySeconds' => 310,
  'SendMessageBatchRequestEntry.2.MessageBody'  => CGI::escape('Hahaha!!'),
  'SendMessageBatchRequestEntry.3.Id'           => 3,
  'SendMessageBatchRequestEntry.3.DelaySeconds' => 320,
  'SendMessageBatchRequestEntry.3.MessageBody'  => CGI::escape('Hahaha!!!'),
  'SendMessageBatchRequestEntry.4.Id'           => 4,
  'SendMessageBatchRequestEntry.4.DelaySeconds' => 330,
  'SendMessageBatchRequestEntry.4.MessageBody'  => CGI::escape('Hahaha!!!!') )

# ... or using CloudApi way:
sqs.SendMessageBatch('myCoolQueue',
  'SendMessageBatchRequestEntry' => [
    { 'Id' => 1, 'DelaySeconds' => 300, 'MessageBody' => CGI::escape('Hahaha!') },
    { 'Id' => 2, 'DelaySeconds' => 310, 'MessageBody' => CGI::escape('Hahaha!!') },
    { 'Id' => 3, 'DelaySeconds' => 320, 'MessageBody' => CGI::escape('Hahaha!!!') },
    { 'Id' => 4, 'DelaySeconds' => 330, 'MessageBody' => CGI::escape('Hahaha!!!!') } ] ) #=>
  {"SendMessageBatchResponse"=>
    {"SendMessageBatchResult"=>
      {"SendMessageBatchResultEntry"=>
        [{"MessageId"=>"8bc2891f-e2d6-4b92-9138-6fa7d2552e2d",
          "Id"=>"1",
          "MD5OfMessageBody"=>"c5bfc3f4240d74756238a1e390cc1391"},
         {"MessageId"=>"bc52eaf2-9f57-48c2-aa2d-7c3507bc306e",
          "Id"=>"2",
          "MD5OfMessageBody"=>"659355aa82149d1334942b5879da028e"},
         {"MessageId"=>"a7a14acd-b722-4146-be55-34167bb9dac8",
          "Id"=>"3",
          "MD5OfMessageBody"=>"faf2f2992906f2daf49f35c302dc3454"},
         {"MessageId"=>"cd443cd2-68a1-4456-b593-a964f336f12e",
          "Id"=>"4",
          "MD5OfMessageBody"=>"4033563a06b308f7366ca3d6bc7e3151"}]},
     "ResponseMetadata"=>{"RequestId"=>"7237d096-677d-4bc6-be44-7a1a313d18d6"},
     "@xmlns"=>"http://queue.amazonaws.com/doc/2011-10-01/"}}
# Get queue attributes:
sqs.GetQueueAttributes('myCoolQueue', 'AttributeName' => 'All') #=>
  {"GetQueueAttributesResponse"=>
    {"GetQueueAttributesResult"=>
      {"Attribute"=>
        [{"Name"=>"VisibilityTimeout", "Value"=>"40"},
         {"Name"=>"ApproximateNumberOfMessages", "Value"=>"7"},
         {"Name"=>"ApproximateNumberOfMessagesNotVisible", "Value"=>"0"},
         {"Name"=>"ApproximateNumberOfMessagesDelayed", "Value"=>"0"},
         {"Name"=>"CreatedTimestamp", "Value"=>"1322001625"},
         {"Name"=>"LastModifiedTimestamp", "Value"=>"1322001625"},
         {"Name"=>"QueueArn", "Value"=>"arn:aws:sqs:us-east-1:826693181925:myCoolQueue"},
         {"Name"=>"MaximumMessageSize", "Value"=>"2048"},
         {"Name"=>"MessageRetentionPeriod", "Value"=>"345600"},
         {"Name"=>"DelaySeconds", "Value"=>"0"}]},
     "ResponseMetadata"=>{"RequestId"=>"85b2d5f4-b63e-44bc-845c-14e4ae16cb9e"},
     "@xmlns"=>"http://queue.amazonaws.com/doc/2011-10-01/"}}
# Delete queue:
sqs.DeleteQueue('myCoolQueue1') #=>
  {"DeleteQueueResponse"=>
    {"ResponseMetadata"=>{"RequestId"=>"01de6439-6817-4308-8645-2a9430316e8a"},
     "@xmlns"=>"http://queue.amazonaws.com/doc/2011-10-01/"}}

See Also: