Назад к вопросам
Intern
18
Что такое Transactional Outbox паттерн?
Компании, где спрашивали
Adapty
Ответ от нейросети
sobes.tech AI
Transactional Outbox — это паттерн для обеспечения атомарности операций записи в базу данных и отправки сообщений в систему обмена сообщениями (например, очередь). Идея в том, что при изменении данных в БД вместе с этими изменениями в той же транзакции сохраняется специальная запись (outbox) с информацией о событии, которое нужно отправить.
Отдельный процесс или сервис затем читает эти записи из outbox и отправляет сообщения в очередь или другому потребителю. Это позволяет гарантировать, что сообщение не будет потеряно и не будет отправлено дважды, так как запись в outbox и изменение данных происходят в одной транзакции.
Пример:
BEGIN TRANSACTION;
-- обновляем основную таблицу
UPDATE orders SET status = 'processed' WHERE id = 123;
-- добавляем запись в outbox
INSERT INTO outbox (event_type, payload) VALUES ('order_processed', '{"orderId":123}');
COMMIT;
Затем отдельный воркер читает из outbox и отправляет сообщения.