Sobes.tech
Senior

¿Para qué sirve el patrón Outbox al enviar un correo electrónico después de crear un pedido? ¿Qué se almacena en él?

sobes.tech AI

Respuesta de la IA

Паттерн Outbox используется для обеспечения надежной и атомарной отправки сообщений (например, email) после создания заказа, особенно в распределённых системах. Основная проблема — гарантировать, что письмо будет отправлено ровно один раз, даже если сервис упадёт или произойдёт сбой.

Вместо того, чтобы сразу отправлять email, информация о событии (например, данные для письма) записывается в отдельную таблицу — Outbox. Эта операция происходит в рамках одной транзакции с созданием заказа, что гарантирует согласованность данных.

Отдельный процесс или сервис периодически читает записи из Outbox, отправляет email и помечает запись как обработанную. Таким образом, достигается надежность и устойчивость к сбоям.

В таблице Outbox хранятся:

  • Идентификатор события
  • Тип события (например, "OrderCreated")
  • Данные для отправки (payload), например, email, шаблон, параметры
  • Статус обработки (например, "pending", "sent")
  • Метаданные (время создания, время отправки и т.п.)

Пример структуры записи в Outbox:

CREATE TABLE outbox (
  id UUID PRIMARY KEY,
  event_type VARCHAR(255),
  payload JSONB,
  status VARCHAR(50) DEFAULT 'pending',
  created_at TIMESTAMP,
  processed_at TIMESTAMP
);