# 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