Sobes.tech
Back to questions
Intern
17

Что такое Transactional Outbox паттерн?

Companies where asked
Adapty

Answer from AI

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 и отправляет сообщения.