Sobes.tech
Senior

Паттерни Outbox барои фиристодани почтаи электронӣ пас аз эҷоди фармоиш чӣ маъно дорад? Дар он чӣ нигоҳ дошта мешавад?

sobes.tech AI

Ҷавоб аз AI

Паттерн 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
);