Skip to content

tily/q3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 http://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
$ 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 Set 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

See Also

TODO

  • https
  • mount on subdirectory
  • dead letter queues
  • message attributes
  • batch actions

About

Simple Amazon SQS compatible API implementation with sinatra and redis

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages