Sobes.tech
Senior
38

Хабарламалардың жеткізілуін кепілдендіру үшін Outbox паттерні туралы айтыңыз.

Сұралған компаниялар
СБЕРСБЕР

AI-дан жауап

sobes.tech AI

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

Идея:

  1. Вместо того чтобы сразу отправлять сообщение в брокер, сервис записывает событие (сообщение) в специальную таблицу "outbox" в той же транзакции, где изменяются бизнес-данные.
  2. Отдельный процесс или поток периодически читает из таблицы outbox новые сообщения и отправляет их в систему обмена сообщениями.
  3. После успешной отправки сообщение помечается как отправленное или удаляется из таблицы.

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

Пример:

// В транзакции
updateOrderStatus(orderId, "PAID");
insertOutboxMessage(orderId, "OrderPaidEvent");

// Отдельный процесс
List<Message> messages = fetchUnsentOutboxMessages();
for (Message msg : messages) {
    sendToMessageBroker(msg);
    markMessageAsSent(msg);
}

Это надёжный способ интеграции с асинхронными системами, минимизирующий потерю данных и рассинхронизацию.