Q3

Summary

Simple Amazon SQS compatible API implementation with sinatra and redis.

Concept

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

will be implemented

will not be implemented

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