Commit после REST-ответа не делает внешний вызов и локальное изменение атомарными. Внешняя операция могла завершиться, а локальная транзакция — упасть; timeout также не доказывает отказ.
В чём проблема такого решения (коммит после ответа внешнего REST-сервиса)?
Commit после REST-ответа не делает внешний вызов и локальное изменение атомарными. Внешняя операция могла завершиться, а локальная транзакция — упасть; timeout также не доказывает отказ.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Commit после REST-ответа не делает внешний вызов и локальное изменение атомарными. Внешняя операция могла завершиться, а локальная транзакция — упасть; timeout также не доказывает отказ.
Если речь о Kafka offset, повтор сообщения после сбоя может повторить внешний эффект. Нужны idempotency key, сохранённое состояние операции и сверка неопределённых результатов. Для БД применяют outbox и процесс согласования, а не держат долгую транзакцию во время сети. Точная схема зависит от того, что именно коммитится.