Sobes.tech
Junior

Is het normaal om een externe service synchron te bellen binnen een transactie?

sobes.tech AI

Antwoord van AI

Синхронный вызов внешнего сервиса внутри транзакции обычно считается плохой практикой. Причины:

  • Транзакция блокирует ресурсы (например, таблицы или строки в базе) до её завершения, а внешний вызов может быть медленным или ненадёжным.
  • Если внешний сервис работает медленно или недоступен, транзакция будет висеть, что ухудшит производительность и может привести к дедлокам.
  • В случае отката транзакции сложно откатить или компенсировать вызов внешнего сервиса.

Лучше:

  • Минимизировать время транзакции, выполняя внешние вызовы вне транзакции.
  • Использовать асинхронные механизмы, очереди сообщений или паттерны с компенсацией.

Пример плохой практики:

@Transactional
public void process() {
    // обновление данных в БД
    repository.update(...);
    // синхронный вызов внешнего сервиса
    externalService.call();
}

Лучше разделить на две части: сначала транзакция с обновлением, потом вызов сервиса.