Hare
Tools and abstractions to interact with AMQP servers.
Hello world
Define a publisher:
defmodule MyPublisher do
use Hare.Publisher
@config [exchange: [name: "foo"]]
def start_link(conn) do
Hare.Publisher.start_link(__MODULE__, conn, @config, [])
end
def publish(publisher, payload) do
Hare.Publisher.publish(publisher, payload)
end
endDefine a consumer:
defmodule MyConsumer do
use Hare.Consumer
@config [exchange: [name: "foo"],
queue: [name: "bar"]]
def start_link(conn, config) do
Hare.Consumer.start_link(__MODULE__, conn, config, [])
end
def handle_message(payload, _meta, state) do
IO.puts(payload)
{:reply, :ack, state}
end
endPublish and consume a message:
{:ok, conn} = Hare.Conn.start_link(adapter: Hare.Adapter.AMQP)
{:ok, publisher} = MyPublisher.start_link(conn)
{:ok, _consumer} = MyConsumer.start_link(conn)
MyPublisher.publish(publisher, "hello world!")
# => Prints "hello world!\n"Installation
If available in Hex, the package can be installed as:
-
Add
hareto your list of dependencies inmix.exs:
```elixir
def deps do
[{:amqp, "~> 0.1.4", hex: :amqp19},
{:hare, "~> 0.1.9"}]
end
```-
Ensure
hareis started before your application:
```elixir
def application do
[applications: [:hare]]
end
```The Hare.Conn
The first step to interact with an AMQP server is to establish a connection.
The Hare.Conn starts a process that wraps a real connection. Starts a connection ,
monitors it, and reconnects on failure.
{:ok, conn} = Hare.Conn.start_link(adapter: Hare.Adapter.AMQP,
backoff: [0, 100, 1000],
config: [host: "localhost", port: 1234])
# => {:ok, %Hare.Core.Conn{...}}The example above shows all available options when starting a connection.
The :adapter option is mandatory and it specifies what adapter to use.
An adapter must implement the Hare.Adapter behaviour which includes functions
like connecting to the server, opening channels, declaring queues, publishing
messages, etc.
The only adapter provided is Hare.Adapter.AMQP that uses the AMQP library.
Note that in order to use the Hare.Adapter.AMQP, the :amqp must be explicitly
included as a dependency.
The :backoff option specifies a set of intervals to wait before retrying connection
in case of failure. It defaults to [0, 10, 100, 1000, 5000].
On successive connection failures it waits successive intervals before retrying and then keeps waiting for the last interval to retry forever.
The :config option will be given without modification to the adapter
open_connection/1 function. It defaults to [].
Publisher
The simplest abstraction provided is the Hare.Publisher. It allows to publish
messages to a particular exchange.
It expects a connection and the exchange configuration in the following format:
config = [exchange: [name: "the.exchange.name",
type: :direct,
opts: [durable: true]]]
The only mandatory option is :name specifying the name of the exchange to publish
to. :type defaults to :direct, and :opts defaults to [].