Проверяет умение проектировать отказоустойчивые интеграции.
Использовать асинхронные вызовы через очередь (Kafka, RabbitMQ).
Реализовать повторные попытки (retry) с экспоненциальной задержкой.
Добавить dead-letter queue для хранения неудачных запросов.
Проблемы синхронного вызова:
Таймауты или сбои внешнего сервиса блокируют поток.
Риск потери данных при падении приложения.
Решение с очередью:
// Отправка в очередь вместо прямого вызова
kafkaTemplate.send("alerts", alert); Consumer с retry:
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 1000, multiplier = 2))
public void sendAlert(Alert alert) {
externalService.send(alert); // Повтор при ошибке 429/500
}Dead-Letter Queue:
Сохраняет алерты, которые не удалось отправить после N попыток.
Позволяет вручную обработать сбои.
Вывод: Очереди + retry гарантируют доставку без блокировки основного потока.