Payment Service
API → Outbox → RabbitMQ → Worker → Webhook
Асинхронный микросервис обработки платежей. Клиент создаёт платёж через REST API, сервис сохраняет его и передаёт обработку в очередь, не заставляя пользователя ждать завершения операции.
Обработать платёж
без ожидания клиента
Платёжные операции могут занимать время: внешний процессинг отвечает не мгновенно, а временные ошибки сети или сервиса нельзя считать окончательным результатом операции.
Поэтому API не выполняет всю обработку синхронно. Оно принимает запрос, сохраняет платёж и возвращает клиенту 202 Accepted.
Платёж проходит
несколько этапов
FastAPI
Принимает запрос на создание платежа и проверяет API Key и Idempotency-Key.
PostgreSQL
Сохраняет платёж и событие для последующей отправки в очередь.
Outbox
Надёжно передаёт событие из базы данных в RabbitMQ, не теряя сообщение.
Worker
Получает задачу из очереди и выполняет обработку платежа отдельно от API.
Webhook
После обработки сервис уведомляет внешний URL с повторными попытками.
Transactional Outbox защищает события
Платёж и событие для очереди записываются в PostgreSQL в рамках одной транзакции. Если операция сохранения прошла успешно, информация о необходимости обработки не теряется.
Отдельный publisher забирает необработанные события и отправляет их в RabbitMQ. После успешной публикации событие помечается как обработанное.
Повторный запрос
не создаёт второй платёж
Клиент передаёт уникальный Idempotency-Key. Если тот же ключ приходит повторно, сервис не создаёт новую платёжную операцию.
Это особенно важно для платежей: повторная отправка запроса из-за таймаута или проблем с сетью не должна приводить к двойному списанию.
Внешний сервис
получает результат
Временная ошибка
не ломает весь процесс
Что внутри
Платёжный сервис,
рассчитанный на асинхронную работу
Проект показывает, как построить отдельный сервис обработки платежей с очередью сообщений, идемпотентностью и механизмами повторной доставки.
Архитектура позволяет отделить публичный API от фоновой обработки и сделать отдельные этапы системы устойчивыми к временным сбоям.
Посмотреть код на GitHub →Давайте соберём систему, которая не развалится при нагрузке
Расскажите о задаче — спроектируем API, интеграции и фоновые процессы под ваш проект.