У меня есть следующий очень простой симулированный клиент:
@FeignClient(name = "user-client", fallbackFactory = UserClientFallbackFactory.class, configuration = MyFeignConfig.class)
public interface UserServiceClient {
@GetMapping(value = "/users", headers = {"Content-Type: application/json"})
List<Namespace> getIdentities(URI baseUrl);
}
со следующим application.yml
feign:
hystrix:
enabled: true
hystrix:
command:
default:
execution:
timeout.enabled: false
isolation.semaphore.maxConcurrentRequests: 100
Когда я вызываю клиента, я динамически генерирую URL во время выполнения:
client.getIdentities(new URI("http://my-user-service.com"));
Но это выдает ошибку:
com.netflix.client.ClientException: Load balancer does not have available server for client: my-user-service.com
Если я вручную укажу URL-адрес в самом клиенте (но все равно передам встроенный объект URI), ошибка исчезнет:
@FeignClient(name = "user-client", url = "http://my-user-service.com", fallbackFactory = UserClientFallbackFactory.class, configuration = MyFeignConfig.class)
Я использую
spring-cloud-starter-openfeign
spring-cloud-starter-netflix-hystrix
С
springBootVersion = '2.1.8.RELEASE'
springCloudVersion = 'Greenwich.SR1'
Почему это происходит? Зачем мне нужно указывать жестко закодированный URL, если я указываю URL во время выполнения? А что это за балансировщик нагрузки? Я не настроил ничего из этого