yggdrasil v3.2.3 Yggdrasil.Publisher.Adapter.RabbitMQ View Source

Yggdrasil publisher adapter for RabbitMQ. The name of the channel should be a tuple with the name of the exchange and the routing key. The exchange should be a topic (or any exhange that redirect to topic) e.g:

Subscription to channel:

iex(1)> alias Yggdrasil.Channel
iex(2)> sub_channel = %Channel{
...(2)>   name: {"amq.topic", "r_key"},
...(2)>   adapter: Yggdrasil.Subscriber.Adapter.RabbitMQ
...(2)> }
iex(3)> Yggdrasil.subscribe(sub_channel)
:ok
iex(4)> flush()
{:Y_CONNECTED, %Channel{name: {"amq.topic", "r_key"}, (...)}}

Publishing message:

iex(5)> pub_channel = %Channel{
...(5)>   name: {"amp.topic", "r_key"},
...(5)>   adapter: Yggdrasil.Publisher.Adapter.RabbitMQ
...(5)> }
iex(6)> Yggdrasil.publish(pub_channel, "message")
:ok

Subscriber receiving message:

iex(7)> flush()
{:Y_EVENT, %Channel{name: {"amq.topic", "r_key"}, (...)}, "message"}

Instead of having sub_channel and pub_channel, the hibrid channel can be used. For the previous example we can do the following:

iex(1)> alias Yggdrasil.Channel
iex(2)> channel = %Channel{name: {"amq.topic", "r_key"}, adapter: :rabbitmq}
iex(3)> Yggdrasil.subscribe(channel)
:ok
iex(4)> flush()
{:Y_CONNECTED, %Channel{name: {"amq.topic", "r_key"}, (...)}}
iex(5)> Yggdrasil.publish(channel, "message")
:ok
iex(6)> flush()
{:Y_EVENT, %Channel{name: {"amq.topic", "r_key"}, (...)}, "message"}

Link to this section Summary

Functions

Publishes a message in a channel using a publisher and optional options. The options argument is a Keyword list of options expected by AMQP.Basic.publish/5 in its fifth argument

Starts a RabbitMQ publisher with a namespace. Additianally you can add GenServer options

Stops a RabbitMQ publisher

Link to this section Functions

Link to this function publish(publisher, channel, message, options \\ []) View Source
publish(GenServer.server(), Yggdrasil.Channel.t(), term(), Keyword.t()) ::
  :ok |
  {:error, term()}

Publishes a message in a channel using a publisher and optional options. The options argument is a Keyword list of options expected by AMQP.Basic.publish/5 in its fifth argument.

Link to this function start_link(namespace, options \\ []) View Source
start_link(term(), GenServer.options()) :: GenServer.on_start()

Starts a RabbitMQ publisher with a namespace. Additianally you can add GenServer options.

Stops a RabbitMQ publisher.