Q3
¶ ↑
Summary¶ ↑
Simple Amazon SQS compatible API implementation with sinatra and redis.
Concept¶ ↑
-
simplicity
-
no authentication, open like wiki
-
no validation, just works as proxy to redis functions
Usage¶ ↑
global service¶ ↑
You can try q3 easily with global endpoint q3-global.herokuapp.com/.
$ curl "http://q3-global.herokuapp.com/?Action=CreateQueue&QueueName=MyQueue001" <?xml version="1.0" encoding="UTF-8"?> <CreateQueueResponse> <CreateQueueResult> <QueueUrl>http://q3-global.herokuapp.com/*/MyQueue001</QueueUrl> </CreateQueueResult> <ResponseMetadata> <RequestId>9bcf7831-59a3-456c-b5fe-e0674f322b79</RequestId> </ResponseMetadata> </CreateQueueResponse>
You can use any Amazon SQS client.
require 'aws-sdk' q3 = AWS::SQS.new( :sqs_endpoint => 'q3-global.herokuapp.com', :access_key_id => 'dummy', :secret_access_key => 'dummy', :use_ssl => false ) queue = q3.queues.create('MyQueue001') queue.send_message('hello!') p queue.receive_message.body # => "hello!"
as rack app¶ ↑
Install gem and you can invoke q3
command to run api.
$ gem install q3 $ ruby bin/q3 [2014-07-06 19:54:47] INFO WEBrick 1.3.1 [2014-07-06 19:54:47] INFO ruby 2.0.0 (2014-02-24) [universal.x86_64-darwin13] == Sinatra/1.4.5 has taken the stage on 4567 for development with backup from WEBrick [2014-07-06 19:54:47] INFO WEBrick::HTTPServer#start: pid=29495 port=4567
Or you can integrate q3 into your config.ru like this:
require 'q3.rb' run Q3
Actions¶ ↑
See for complete action list: Welcome - Amazon Simple Queue Service.
implemented¶ ↑
-
Queue Operation
-
CreateQueue
-
ListQueues
-
GetQueueAttributes
-
GetQueueUrl
-
SetQueueAttributes
-
DeleteQueue
-
Message Operation
-
SendMessage
-
ReceiveMessage
-
ChangeMessageVisibility
-
DeleteMessage
will be implemented¶ ↑
-
SendMessageBatch
-
ChangeMessageVisibilityBatch
-
DeleteMessageBatch
-
ListDeadLetterSourceQueues
will not be implemented¶ ↑
-
AddPermission
-
RemovePermission
Data Schema¶ ↑
| Key Name | Type | Content | Delete Timing | | ——————————————————- | ———- | —————————— | ——————————————— | | Queues | List | Queue Names | - | | Queues:${QueueName} | Hash | Queue Attributes | DeleteQueue action | | Queues:${QueueName}:Messages | List | Message Ids | DeleteQueue action | | Queues:${QueueName}:Messages:${MessageId} | Hash | Message Attributes | expires due to MessageRetentionPeriod | | Queues:${QueueName}:Messages:${MessageId}:Delayed | String | Message Id | expires due to DelaySeconds | | Queues:${QueueName}:Messages:${MessageId}:ReceiptHandle | String | ReceiptHandle | expires due to VisibilityTimeout | | Queues:${QueueName}:ReceiptHandles:${ReceiptHandle} | String | Message Id | expires due to VisibilityTimeout |
TODO¶ ↑
-
https
-
mount on subdirectory