Senior
38
Хабарламалардың жеткізілуін кепілдендіру үшін Outbox паттерні туралы айтыңыз.
Сұралған компаниялар
AI-дан жауап
sobes.tech AI
Паттерн Outbox используется для гарантии доставки сообщений между микросервисами или компонентами, особенно когда нужно обеспечить атомарность записи данных и отправки сообщений.
Идея:
- Вместо того чтобы сразу отправлять сообщение в брокер, сервис записывает событие (сообщение) в специальную таблицу "outbox" в той же транзакции, где изменяются бизнес-данные.
- Отдельный процесс или поток периодически читает из таблицы outbox новые сообщения и отправляет их в систему обмена сообщениями.
- После успешной отправки сообщение помечается как отправленное или удаляется из таблицы.
Так достигается гарантия, что сообщение не потеряется и не будет отправлено дважды, так как запись в outbox и изменение данных происходят в одной транзакции базы данных.
Пример:
// В транзакции
updateOrderStatus(orderId, "PAID");
insertOutboxMessage(orderId, "OrderPaidEvent");
// Отдельный процесс
List<Message> messages = fetchUnsentOutboxMessages();
for (Message msg : messages) {
sendToMessageBroker(msg);
markMessageAsSent(msg);
}
Это надёжный способ интеграции с асинхронными системами, минимизирующий потерю данных и рассинхронизацию.