defmodule HareMq.Exchange do
alias HareMq.Configuration
@default_type Application.compile_env(:hare_mq, :exchange_type, :direct)
@moduledoc """
Module providing functions for managing RabbitMQ exchanges.
This module includes functions for declaring and binding exchanges.
"""
@doc """
Declare a RabbitMQ exchange.
## Parameters
- `:channel`: The AMQP channel.
- `:name`: The name of the exchange.
- `:type`: The type of the exchange.
## Examples
HareMq.Exchange.declare(channel: channel, name: "my_exchange", type: :direct)
HareMq.Exchange.declare(channel: channel, name: "my_exchange")
"""
def declare(channel: channel, name: name, type: type) do
AMQP.Exchange.declare(channel, name, type, durable: true)
end
def declare(channel: channel, name: name) do
AMQP.Exchange.declare(channel, name, @default_type, durable: true)
end
@doc """
Bind a RabbitMQ exchange to a destination.
## Parameters
- `:channel`: The AMQP channel.
- `:destination`: The name of the destination exchange or queue.
- `:source`: The name of the source exchange.
- `:routing_key`: The routing key.
## Examples
HareMq.Exchange.bind(channel: channel, destination: "destination_exchange", source: "my_exchange", routing_key: "my_routing_key")
"""
def bind(%Configuration{} = config) do
AMQP.Exchange.bind(config.channel, config.queue_name, config.exchange,
routing_key: config.routing_key
)
end
def bind(channel: channel, destination: destination, source: source, routing_key: routing_key) do
AMQP.Exchange.bind(channel, destination, source, routing_key: routing_key)
end
end