Перейти к содержанию

Доставка: события публикации через RabbitMQ

Создадим «Доставку» — самостоятельный комплект обмена фактами публикации материала между владельцем API, каталогом и аудитом. Объявим topology, опубликуем событие, разделим направления подтверждений, добавим ограниченные повторы и разбор отказов. Завершим inbox-квитанцией, защитой редакций и transactional outbox.

Серия посвящена broker-обмену между сервисами. Redis и фоновые задачи и Temporal Workflow рассматривают другие модели работы. Запуск OpenSearch не требуется: наш event payload не является поисковой записью, для соединения проектов нужен отдельный адаптер. Предполагается знакомство с Python, HTTP, JSON и локальной транзакцией.

Python 3.13, RabbitMQ 4.3.6, Pika 1.3.2; SQLite входит в Python-runtime. Читатель предоставляет отдельный broker и устанавливает указанную зависимость в своей среде.

Одноузловые durable classic queues, локальные SQLite-эффекты, один relay, API только на loopback без входа. Ordinary TTL/DLX retry имеет отдельный предел сохранности. Серия не обещает exactly-once, универсальную at-least-once-доставку при всех отказах или автоматическую совместимость с OpenSearch.

Архив полного итогового проекта содержит реальные исходники, README, данные и карту этапов. Это один проект, не набор самостоятельных снимков уроков. Учебные приложения, broker/engine, базы, запросы, тесты и замеры при подготовке не запускались. Все результаты статей обозначены ожидаемыми.

Уроки и результаты

№ Урок Новый результат
01 Событие публикации и границы доставки Команда и v1-факт различаются
02 Соединение, канал и долговечная топология Connection/channel и durable-объекты заданы
03 Издатель сообщения и свойства конверта Событие публикуется с message_id
04 Exchanges и независимые маршруты получателей Независимые получатели и resume различены
05 Подтверждение после фиксации эффекта Ack следует после локального commit
06 Publisher confirms и неизвестный исход публикации Confirm/return и неизвестный исход различаются
07 Отложенный повтор для одного обработчика Retry имеет TTL, предел и адресный возврат
08 Очередь отказов и осознанный повтор Несовместимое и исчерпанное сообщение сохраняется
09 Идемпотентный эффект и квитанция inbox Inbox и эффект фиксируются вместе
10 Восстановление соединения и порядок редакций Клиент восстанавливает connection/channel с паузой
11 API публикации и transactional outbox API сохраняет material/request/outbox, relay получает confirm
12 Наблюдение и передача проекта Доставка Pending/ready/unacked/retry/dead и границы описаны

Восемь серий объединяет маршрут интерактивного веба.