🌍 Привет мир! 👋
🌍 Привет мир! 👋
Продолжим говорить о типах
🚀 Мотивация
Использование DLX в проекте обеспечит надежность и устойчивость системы, позволит эффективно обрабатывать, анализировать и повторно пытаться доставить сообщения, которые не были успешно обработаны, тем самым улучшается управление ошибками и повышается общая стабильность архитектуры приложения.
❓ Что такое DLX
DLX — специальный
«Мертвые письма» могут появляться по причине того что:
1️⃣ Сообщение просрочено, превышен TTL сообщения;
2️⃣ Сообщение было отклонено с помощью
3️⃣ Достигнут предел
⚙️ Процесс обработки
Сообщение попадает в
📝 Расширофровка Dead-Letter
При чтении из
Что происходит в коде выше ⁉️
1️⃣ Чтение сообщения: Функция
2️⃣ Проверка сообщения: проверка что
3️⃣ Получение информации: Заголовок
4️⃣ Логирование причины и маршрута: Если заголовок
- Причина: Поле
- Исходный exchange: Поле
- Исходный routing-key: Поле
5️⃣ Подтверждение сообщения: Функция
📢 Полезные советы
📌 Реализация механизма повторных попыток (
🅰️
🅱️ Циклические очереди: Создается несколько очередей с разным
📌 Внедрение системы мониторинга, например через Prometheus или Grafana, для контроля количества сообщений в "мертвых" очередях.
📌 Добавление пользовательских заголовков к сообщениям для хранения информации о происхождении или количестве повторных попыток.
📌 Использование параметра
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍
#RABBITMQ
Продолжим говорить о типах
exchange в #RABBITMQ. И сегодня речь пойдет про Dead Letter Exchange (DLX), читаем и делаем систему более стабильной.🚀 Мотивация
Использование DLX в проекте обеспечит надежность и устойчивость системы, позволит эффективно обрабатывать, анализировать и повторно пытаться доставить сообщения, которые не были успешно обработаны, тем самым улучшается управление ошибками и повышается общая стабильность архитектуры приложения.
❓ Что такое DLX
DLX — специальный
exchange, получающий сообщения, которые не удалось успешно доставить к consumers.«Мертвые письма» могут появляться по причине того что:
1️⃣ Сообщение просрочено, превышен TTL сообщения;
2️⃣ Сообщение было отклонено с помощью
channel.nack() или channel.reject() с requeue: false;3️⃣ Достигнут предел
queue length.⚙️ Процесс обработки
Сообщение попадает в
DLX, затем перенаправляется в "мертвую" очередь (DLQ). Можно направлять в нужную очередь, в зависимости от типа сбоя или ключа маршрутизации.📝 Расширофровка Dead-Letter
При чтении из
DLQ, можно получить дополнительную информацию о том, почему сообщение было помещено в "очередь мертвых писем", используя заголовок x-death в свойствах сообщения.channel.consume('dead_letter_queue', (msg) => {
if (!msg) {
return;
}
const xDeath = msg.properties.headers['x-death'];
if (xDeath) {
console.log('Причина:', xDeath[0].reason);
console.log('Исходный exchange:', xDeath[0].exchange);
console.log('Исходный routing-key:', xDeath[0]['routing-key']);
channel.ack(msg);
}
});
Что происходит в коде выше ⁉️
1️⃣ Чтение сообщения: Функция
consume подписывается на очередь dead_letter_queue. Когда в этой очереди появляется сообщение, эта функция вызывается с объектом msg.2️⃣ Проверка сообщения: проверка что
msg не является null.3️⃣ Получение информации: Заголовок
x-death в свойствах сообщения предоставляет информацию о том, почему сообщение оказалось в "очереди мертвых писем". Извлекается заголовок, чтобы получить дополнительные сведения.4️⃣ Логирование причины и маршрута: Если заголовок
x-death существует, извлекаются данные:- Причина: Поле
reason указывает, почему сообщение было перемещено в dead-letter очередь.- Исходный exchange: Поле
exchange показывает, на какой exchange сообщение было изначально отправлено.- Исходный routing-key: Поле
routing-key содержит ключ маршрутизации, использовавшийся при первоначальной отправке сообщения.5️⃣ Подтверждение сообщения: Функция
channel.ack(msg) подтверждает получение сообщения и удаляет из DLQ, предотвращая повторное потребление.📢 Полезные советы
📌 Реализация механизма повторных попыток (
Retry Mechanism)🅰️
TTL для сообщений: Настраивается через параметр x-message-ttl на "мертвой" очереди для автоматического перемещения сообщений.🅱️ Циклические очереди: Создается несколько очередей с разным
TTL для управления повторными попытками.📌 Внедрение системы мониторинга, например через Prometheus или Grafana, для контроля количества сообщений в "мертвых" очередях.
📌 Добавление пользовательских заголовков к сообщениям для хранения информации о происхождении или количестве повторных попыток.
📌 Использование параметра
x-dead-letter-routing-key: Этот параметр необязателен, но если его задать, "мертвое" сообщение сначала попадет в DLE, а затем будет перенаправлено в нужную DLQ с указанным ключом маршрутизации.💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍
#RABBITMQ

Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.