tgoop.com/Java_Iibrary/1765
Last Update:
Когда вы становитесь опытным Java-разработчиком, на собеседованиях нам уже недостаточно просто задавать фактические вопросы. На первое место выходят сценарные вопросы. Посмотрим на один такой сценарий и попробуем дать ответы.
Сценарий: Ваш сервис выступает как оркестратор, вызывая несколько downstream-сервисов для выполнения запроса. Один из этих сервисов известен своей ненадёжностью -> он медленный и иногда возвращает ошибку 503 Service Unavailable.
Вопросы:
I. Как сделать ваш сервис устойчивым к ненадёжности downstream-сервиса?
Объясните, как вы бы реализовали паттерн Circuit Breaker с помощью библиотеки вроде Resilience4j. Какие ключевые состояния у Circuit Breaker (Closed, Open, Half-Open)?
II. Какой fallback-механизм вы бы реализовали для случая, когда цепь открыта?
Например, вернёте ли вы кэшированные данные, дефолтный ответ или поставите запрос в очередь на последующую обработку?
III. Как вы бы спроектировали глобальную стратегию обработки исключений в приложении с использованием @RestControllerAdvice
?
Покажите, как сопоставить конкретное бизнес-исключение (например, ProductNotFoundException) с HTTP-статусом 404 Not Found и вернуть чистый JSON-ответ с ошибкой.