# Broadway RabbitMQ ## Example with a dead letter exchange defmodule MyApp.MyConsumer do use Broadway @exchange Application.fetch_env!(:my_app, :my_exchange) @exchange_dlx Application.fetch_env!(:my_app, :my_exchange_dlx) @queue Application.fetch_env!(:my_app, :my_queue) @queue_dlx Application.fetch_env!(:my_app, :my_queue_dlx) def start_link(_opts) do initialize_queues() Broadway.start_link(__MODULE__, name: MyApp.MyConsumer, producer: [ module: { BroadwayRabbitMQ.Producer, queue: @queue, bindings: [{@exchange, []}], declare: [ durable: true, arguments: [ {"x-dead-letter-exchange", :longstr, @exchange_dlx}, {"x-dead-letter-routing-key", :longstr, @queue_dlx} ] ] } ], processors: [ default: [] ] ) end defp initialize_queues do {:ok, channel} = AMQP.Application.get_channel(:consumer) AMQP.Exchange.declare(channel, @exchange_dlx, :fanout) AMQP.Exchange.declare(channel, @exchange, :fanout) AMQP.Queue.declare(channel, @queue_dlx, durable: true) AMQP.Queue.bind(channel, @queue_dlx, @exchange_dlx) end @impl true def handle_message(_, message, _) do do_work_on(message) message end end