Интеграция ленты eureka - невозможно перечислить серверы

Я получаю следующее исключение, когда пытаюсь выполнить следующий код, который использует ленту и пытается получить список серверов от eureka.

Исключение

3122 [main] WARN com.netflix.loadbalancer.RoundRobinRule - No up servers available from load balancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=origin,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:DiscoveryEnabledNIWSServerList:; clientName:origin; Effective vipAddresses:localhost; isSecure:false; datacenter:null
Exception in thread "main" com.netflix.client.ClientException: LoadBalancer returned null Server for :origin
    at com.netflix.client.LoadBalancerContext.computeFinalUriWithLoadBalancer(LoadBalancerContext.java:418)
    at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:166)
    at com.netflix.zuul.RibbonTest.main(RibbonTest.java:23)

Код

public static void main(String[] args) throws Exception {
    ConfigurationManager.loadPropertiesFromResources("ribbon-client.properties");
    RestClient client = (RestClient) ClientFactory.getNamedClient("origin");          
    HttpRequest request = HttpRequest.newBuilder().uri(new URI("/serviceContext/api/v1/")).build(); 
    for (int i = 0; i < 20; i++)  {
        HttpResponse response = client.executeWithLoadBalancer(request); 
    }
}

лента-client.properties

origin.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList
#also tried unsuccessfully with localhost:8091, localhost:8091/serviceContext
origin.ribbon.DeploymentContextBasedVipAddresses=localhost

Служба представляет собой приложение Spring-Boot (не использующее Spring-Cloud), использующее eureka-client.properties:

eureka-client.properties

eureka.registration.enabled=true
eureka.preferSameZone=true
eureka.shouldUseDns=false
eureka.serviceUrl.default=http://localhost:9080/eureka/v2/
eureka.region=default
eureka.name=service-Eureka
eureka.vipAddress=localhost
eureka.port=8091
eureka.instanceId=CHNSHL119363L

Служба успешно зарегистрирована в eureka, развернутой в локальном порту tomcat@9080, и доступна для обнаружения @ http://localhost:9080/eureka/ and http://localhost:9080/eureka/v2/apps/

Без использования Spring-Cloud, что нужно исправить в приведенном выше коде/конфигурации, чтобы иметь возможность динамически получать список серверов из eureka с помощью ленты?


person Divs    schedule 24.01.2017    source источник


Ответы (1)


Следующий пост оказался полезным. Проблема решена следующим образом:
1. Исправление конфигурации vipAddress для сервиса и ленты
2. Настройка и регистрация ленты как eureka-client

<сильный>1. Изменения для vipAddress

eureka-client.properties (сервис)

eureka.vipAddress=my.eureka.local

лента-client.properties

origin.ribbon.DeploymentContextBasedVipAddresses=my.eureka.local

<сильный>2. Изменения в регистрации ленты как eureka-client

public static void main(String[] args) throws Exception {
    ConfigurationManager.loadPropertiesFromResources("ribbon-client.properties");

    **InstanceInfo instanceInfo = new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get();
    applicationInfoManager = new ApplicationInfoManager(instanceConfig, instanceInfo);
    eurekaClient = new DiscoveryClient(applicationInfoManager, clientConfig);**

    RestClient client = (RestClient) ClientFactory.getNamedClient("origin");          
    HttpRequest request = HttpRequest.newBuilder().uri(new URI("/serviceContext/api/v1/")).build(); 
    for (int i = 0; i < 20; i++)  {
                HttpResponse response = client.executeWithLoadBalancer(request); 
    }
}
person Divs    schedule 27.01.2017