Раздел 45 · Python backend: Тарбадель

Задачи и транзакции: on_commit и outbox

middle-senior~35 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Утром покупатель Барахолки показывает на экране письмо: «Заказ №41 оплачен, 1899.00 кр.». Заказа №41 в базе нет. Его транзакция откатилась на ошибке формы оплаты, а задача на письмо к тому времени уже лежала в очереди.

В прошлом уроке оплата, письма и отчёт выстроились цепочками и пошли по расписанию. Но каждая цепочка начинается с того, что кто-то ставит задачу. Заказ при этом пишется в PostgreSQL, а задача в Redis, и общей транзакции у них нет. Сегодня разберём, что ломается в этой щели, и закроем её так, как закрывают в бою: сообщение пишется в ту же базу, что и заказ, а в очередь его переносит отдельный ретранслятор.

урок из курса

Урок из курса «Python backend: Тарбадель». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.