Я использую Spring WebFlux с функциональными конечными точками для создания API.Чтобы получить желаемые результаты, мне нужно использовать внешний RESTful API и сделать это асинхронно, используя реализацию WebClient.Он работает хорошо и выглядит следующим образом:
public WeatherWebClient() {
this.weatherWebClient = WebClient.create("http://api.openweathermap.org/data/2.5/weather");
}
public Mono<WeatherApiResponse> getWeatherByCityName(String cityName) {
return weatherWebClient
.get()
.uri(uriBuilder -> uriBuilder
.queryParam("q", cityName)
.queryParam("units", "metric")
.queryParam("appid", API_KEY)
.build())
.accept(APPLICATION_JSON)
.retrieve()
.bodyToMono(WeatherApiResponse.class);
}
Поскольку это обеспечивает доступ к сети, это хороший пример использования NetFlix OSS Hystrix.Я попытался использовать spring-cloud-starter-netflix-hystrix, добавив @HystrixCommand к описанному выше методу, но нет способа заставить его отключить схему, даже если я установил неверный URL (404) или неправильный API_KEY (401).
Я думал, что это может быть проблемой совместимости с самим WebFlux, но установка свойства @HystrixProperty (name = "circuitBreaker.forceOpen", value = "true") действительно заставляет работать резервный метод.
Я что-то упустил?Является ли этот подход несовместимым с Spring WebClients?
Спасибо!