2017-01-24 13 views
1

リボンを使用する次のコードを実行しようとしているときに、ユーレカからサーバリストを取得しようとしたときに次の例外が発生します。ユーレカリボンの統合 - サーバをリストすることができません

例外

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); 
    } 
} 

ribbon-client.properties

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

サービスは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 

サービスは、ポート9080 @ローカルのTomcatに配備ユーレカで正常に登録されますと、発見可能なさhttp://localhost:9080/eureka/ and http://localhost:9080/eureka/v2/apps/

W/O @固定する必要があるもの春クラウドを利用してリボンを使ってユーレカからサーバのリストを動的に取得できるようにするには、上記のコード/設定で?

答えて

0

以下のpostが役に立ちました。 問題は、サービスとリボンvipAddress

eureka-client.propertiesため
ユーレカ・クライアントとして2の設定と登録リボン

1.変更(ため
1.修正vipAddress構成によって解決されますサービス)

eureka.vipAddress = my.eureka.local

ribbon-client.properties

origin.ribbon.DeploymentContextBasedVipAddresses = my.eureka.local

2.変更ユーレカ・クライアント

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); 
    } 
} 
としてリボンを登録します
関連する問題