Current section

Files

Jump to
extreme_system lib system rabbitmq consumers.ex
Raw

lib/system/rabbitmq/consumers.ex

defmodule Extreme.System.RabbitMQ.Consumers do
use Supervisor
def start_link(connection_name, configuration, opts),
do: Supervisor.start_link(__MODULE__, {connection_name, configuration}, opts)
def init({connection_name, configuration}) do
conn = Extreme.System.RabbitMQ.Connection.get_connection connection_name
children = configuration
|> Enum.map(&define_worker(conn, &1))
supervise children, strategy: :one_for_one
end
defp define_worker(conn, {:publisher, name, targets}),
do: worker( Extreme.System.RabbitMQ.Publisher, [conn, targets, [name: name]], id: name)
defp define_worker(conn, {:listener, name, definition}),
do: worker( Extreme.System.RabbitMQ.Listener, [conn, definition, [name: name]], id: name)
end