defmodule HareMq.Configuration do @moduledoc """ Configuration module for HareMq. This module provides functions for configuring HareMq components, such as queues and connections. """ @doc """ Structure representing the configuration for a queue. ## Fields - `:channel`: The AMQP channel. - `:queue_name`: The name of the queue. - `:delay_queue_name`: The name of the delay queue. - `:dead_queue_name`: The name of the dead letter queue. - `:exchange`: The AMQP exchange. - `:routing_key`: The routing key. - `:delay_in_ms`: The delay in milliseconds. - `:message_ttl`: The message time-to-live. - `:retry_limit`: The number of retry attempts. - `:durable`: Whether the queue is durable or not. ## Examples config = %Configuration{...} """ alias __MODULE__ @delay_in_ms Application.compile_env(:hare_mq, :configuration)[:delay_in_ms] || 10_000 @retry_limit Application.compile_env(:hare_mq, :configuration)[:retry_limit] || 15 @message_ttl Application.compile_env(:hare_mq, :configuration)[:message_ttl] || 31_449_600 defstruct [ :channel, :queue_name, :delay_queue_name, :dead_queue_name, :exchange, :routing_key, :delay_in_ms, :message_ttl, :retry_limit, :durable ] @doc """ Get the configuration for a queue. ## Examples config = get_queue_configuration( channel: channel, name: name, exchange: exchange, routing_key: routing_key ) """ def get_queue_configuration( channel: channel, name: name, exchange: exchange, routing_key: routing_key ) do %Configuration{ channel: channel, queue_name: name, delay_queue_name: "#{name}.delay", dead_queue_name: "#{name}.dead", exchange: exchange, routing_key: routing_key, delay_in_ms: @delay_in_ms, message_ttl: @message_ttl, retry_limit: @retry_limit, durable: true } end end