Java / Spring: симулировать ошибки с помощью Load Balancer нет доступного сервера для клиента - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть следующий очень простой симулированный клиент:

@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 во время выполнения? А что это за балансировщик нагрузки? Я не настроил ничего из этого

...