Transactional Outbox помогает согласовать изменение данных и последующую публикацию события без распределенной транзакции, но надежность появляется только вместе с повторной доставкой, наблюдаемостью и идемпотентным потребителем.
Запишите атомарно
Сохраняйте бизнес-изменение и событие outbox в одной транзакции той же базы. Отдельная запись оставляет окно потери.
Публикуйте повторно
Фоновый процесс читает неподтвержденные записи, отправляет их брокеру и безопасно повторяет попытку. Дубликаты нормальны.
Контролируйте поток
Измеряйте возраст очереди, ошибки, повторы и размер таблицы, задайте очистку и порядок там, где он нужен. Молчание опасно.
Проверьте внезапную остановку издателя, повтор после таймаута и обработку одного события дважды, потому что схема работает не за счет обещания однократной доставки, а благодаря управляемому повторению без двойного эффекта.
Каждого потребителя защищает идемпотентность. Критические события включайте в общую сквозную наблюдаемость.