Что такое Dead Letter Queue

«Что такое Dead Letter Queue» — вопрос из категории Брокеры сообщений, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Dead Letter Queue (DLQ) — это специальная очередь для хранения сообщений, которые не удалось обработать после нескольких попыток. Используется в системах обмена сообщениями для изоляции проблемных сообщений и предотвращения засорения основной очереди.

Пример на Go с использованием RabbitMQ:

ch, err := conn.Channel()
if err != nil {
    log.Fatal(err)
}

// Создаем DLQ
args := amqp.Table{"x-dead-letter-exchange": "dlx"}
q, err := ch.QueueDeclare(
    "work_queue",
    false,
    false,
    false,
    false,
    args,
)

// Публикуем сообщение с TTL
err = ch.Publish(
    "",
    "work_queue",
    false,
    false,
    amqp.Publishing{
        ContentType: "text/plain",
        Body:        []byte("msg"),
        Expiration:  "10000", // 10 секунд
    })

Ключевые особенности DLQ:

  • Сообщения попадают в DLQ после истечения TTL или при N неудачных попытках обработки
  • Позволяет анализировать и переотправлять проблемные сообщения
  • Предотвращает бесконечные повторные обработки