viniciusoyama/rabbitmq-spec

View on GitHub
README.md

Summary

Maintainability
Test Coverage
rabbitmq-spec
==========
[![Travis](https://travis-ci.org/viniciusoyama/rabbitmq-spec.svg?branch=master)](https://travis-ci.org/viniciusoyama/rabbitmq-spec)
[![Code Climate](https://codeclimate.com/github/viniciusoyama/rabbitmq-spec/badges/gpa.svg)](https://codeclimate.com/github/viniciusoyama/rabbitmq-spec)
[![Test Coverage](https://codeclimate.com/github/viniciusoyama/rabbitmq-spec/badges/coverage.svg)](https://codeclimate.com/github/viniciusoyama/rabbitmq-spec)

Gem for documenting and configuring RabbitMQ.

It uses the specification files themselves to setup all the exchanges, queues and bindings on RabbitMQ.

# Installation

Add this line to your application's Gemfile:

```ruby

gem 'rabbitmq-spec'

```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install rabbitmq-spec

# Usage

## Specification files

You can document your RabbitMQ architecture using this gem DSL.

We suggest to make a new folder called mqspecs and put your RabbitMQ Specification there. You can define everything in one file or split in many files/subfolders.

Example:

```

├── my_app/
│   ├── ...
├── mqspecs/
│   ├── exchange1_mqspec.rb
│   ├── exchange2_mqspec.rb
│   ├── ...

```

On each mqspec file. You can use the following syntax:

`````ruby

  exchange 'exchange-name' do
    description 'exchange-description' # optional

    # exchange options are forwarded to Bunny Channel#exchanged method
    # http://reference.rubybunny.info/Bunny/Channel.html#exchange-instance_method
    options do
      type 'topic'
      durable true
    end

    # this queue will be binded to the parent exchange
    # it will be created if it not exists yet.
    queue 'queue-name' do
      description 'queue1 description' # optional
      routing_key 'my-custom-routing-key' # optional

      # queue options are forwarded to Bunny Channel#queue method
      # http://reference.rubybunny.info/Bunny/Channel.html#queue-instance_methodChannel.html#exchange-instance_method
      options do
        durable true
      end
    end
  end

  # you can declare queues outside exchanges.
  # The setup process will not bind them to anything
  queue 'queue-name' do
    description 'queue1 description'
    options do
      durable true
    end
  end
`````

## RabbitMQ Setup

To understand how to use rabbitmq-spec just type the following on your shell after installing the gem:

```shell

rabbitmq-spec

```

It will list all the available commands and how to use them. Example:

```

$ rabbitmq-spec
USAGE
    rabbitmq-spec command [options]

COMMANDS
    setup     
    Usage: rabbitmq-spec setup ./mqspec [-u 'amqp://guest:guest@localhost:5672']
    Configure RabbitMQ using the mqspecs files.
    If you pass a ruby file it will evaluate it.
    If you pass a folder it will look for all the files finishing with "_mqspec.rb" and evaluate them.


OPTIONS
    -h --help      show help for rabbitmq-spec

```

## Development

After checking out the repo, run `bin/setup` to install dependencies.

No additional configuration is needed.

Here we're using Rspec with simplecov and rubocop.

## Contributing

If you have any idea for a feature or have found any bugs feel free to open a new issue at:

https://github.com/viniciusoyama/rabbitmq-spec.


## License

The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).