Ответ
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 неудачных попытках обработки
- Позволяет анализировать и переотправлять проблемные сообщения
- Предотвращает бесконечные повторные обработки