Skip to content

Асинхронный интерфейс для работы с RabbitMQ with DLX

Notifications You must be signed in to change notification settings

VladaSabelnikova/rabbitmq_with_dlx

Repository files navigation

Асинхронный интерфейс для RabbitMQ with DLX.

DLX use cases:

  1. Контролируемый повтор сообщения в случае коллизий consumer-а
  2. Отложенные сообщения
  3. Сообщения по расписанию (scheduler)

Интерфейс позволяет:

  1. Автоматически развёртывать DLX инфрастуктуру
  2. Автоматически создавать очереди в момент чтения или записи сообщения
  3. Удалять очереди и завершать работу consumer-ов при помощи kill-signal
  4. Асинхронно обрабатывать сообщения из очереди

ВАЖНО: Обращение к RabbitMQ по сети обёрнуто в backoff с лимитом таймаута

При помощи механизма DLX интерфейс реализует следующий функционал:

  1. Единая точка входа всех сообщений с возможностью установки delay (отложенная обработка сообщений)

  2. Повторная обработка сообщений в случае коллизий с ограничением числа повторов

    architecture_rabbit_mq

Инструкция по развёртыванию:

  1. Клонировать проект
  2. Установить зависимости poetry install
  3. Запустить RabbitMQ docker-compose up -d
  4. В src/use_case добавить .env файл (образец в src/use_case/.env_example)

После этого можно запустить демонстрационные файлы:

  • src/use_case/consumer.py (демонстрирует работу consumer-а)
  • src/use_case/pub_casual_message.py (демонстрирует публикацию обычных сообщений)
  • src/use_case/pub_delayed_message.py (демонстрирует публикацию отложенных сообщений)
  • src/use_case/pub_kill_signal_message.py (демонстрирует публикацию kill-signal)

Планы по доработке:

  1. Усовершенствовать механизм выключения consumer-ов. Сейчас kill_signal может выключить только ОДИН consumer. Это удобно для разовых очередей (например для работы с WebSocket). Нужно доработать механизм для выключения ВСЕХ имеющихся consumer-ов у очереди (их может быть много).

About

Асинхронный интерфейс для работы с RabbitMQ with DLX

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages