Conejo is a library based on pma/amqp which will help you to define your AMQP/RabbitMQ publishers and consumers in an easier way.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
lib
test
.formatter.exs
.gitignore
.travis.yml
LICENSE
README.md
mix.exs

README.md

Conejo

hex.pm hexdocs.pm Build Status

Conejo is an OTP application/library based on pma/amqp which will help you to define your AMQP/RabbitMQ publishers and consumers in an easier way.

I highly recommend to initiate your publishers/consumers under a Supervisor.

Installation

  • Add conejo to your list of dependencies in mix.exs:

    def deps do
       [{:conejo, "~> 0.6"}]
    end

Configuration

  • Define your config files. Try to respect this configuration. It is based on the options that are needed by pma/amqp.
  • If you whish to use a virtual host, you can specify an optional parameter called "vhost" containing your wanted vhost (eg. "dev").
config :my_application, :consumer,
  exchange: "my_exchange",
  exchange_type: "topic",
  queue_name: "my_queue",
  queue_declaration_options: [{:auto_delete, true}, {:exclusive, true}],
  queue_bind_options: [routing_key: "example"],
  consume_options: [no_ack: true]


config :conejo, 
  host: "my_host",
  port: 5672,
  vhost: "dev",
  username: "user",
  password: "pass"

Confex is supported.

Consumer

  • Define and run your Consumers. Code the function handle_consume(channel, tag, redelivered, payload) which will be executed when a message is received.
defmodule MyApplication.MyConsumer do
  use Conejo.Consumer

  def handle_consume(_channel, payload, _params) do
    IO.puts "Received  ->  #{inspect payload}"
  end
end
   
options = Application.get_all_env(:my_application)[:consumer] 
{:ok, consumer} = MyApplication.MyConsumer.start_link(options, [name: :consumer])

Publisher

  • Define and run your Publisher.
defmodule MyApplication.MyPublisher do
  use Conejo.Publisher

end
   
{:ok, publisher} = MyApplication.MyPublisher.start_link([], [name: :publisher])

#Synchronous
MyApplication.MyPublisher.sync_publish(:publisher, "my_exchange", "example", "Hola")

#Asynchronous
MyApplication.MyPublisher.async_publish(:publisher, "my_exchange", "example", "Adios")

Test

  • Run the tests. You have to have Docker installed in you computer.
mix test --no-start

Internal dependencies

Conejo dependencies use lager for logging, so you have to configure it in your configuration files:

config :lager,
  handlers: [level: :critical]