Senior
50
Outbox նմուշը՝ ինչպես ապահովել տվյալների բազայում գրառման և իրադարձության հերթին ուղարկման ատոմարությունը։
Ընկերությունները, որտեղ հարցրել են
Պատասխան AI-ից
sobes.tech AI
Паттерн Outbox используется для обеспечения атомарности между записью данных в базу и отправкой события в очередь сообщений, чтобы избежать рассинхронизации.
Как это работает:
- Вместо того чтобы сразу отправлять событие в очередь, приложение записывает событие в специальную таблицу "outbox" в той же транзакции, где изменяет основную бизнес-данные.
- После успешного коммита транзакции отдельный процесс (например, воркер) читает события из таблицы outbox и отправляет их в очередь сообщений.
- После успешной отправки событие помечается как обработанное или удаляется из таблицы.
Таким образом, запись в БД и сохранение события происходят атомарно — либо оба, либо ни одного.
Пример на Java с использованием Spring и транзакций:
@Transactional
public void saveEntityAndOutboxEvent(Entity entity, OutboxEvent event) {
entityRepository.save(entity); // сохраняем бизнес-данные
outboxRepository.save(event); // сохраняем событие в outbox
}
Отдельный сервис периодически читает события из outbox и публикует их в очередь.
Это гарантирует, что событие не будет потеряно и не будет отправлено без соответствующих изменений в БД.