2017-05-17 2 views
1

Ich kann keine @FeignClient mit einer Liste von Servern konfigurieren zu verwenden. Ich verwende Spring Cloud Netflix, aber dieser spezielle Dienst (foo-service) registriert sich nicht bei Eureka. Aus diesem Grund muss ich eine Liste von Servern für foo-service in einer YML-Datei konfigurieren.@ FeignClient kann nicht mit einer Liste von Servern konfiguriert werden

Die listOfServers wird jedoch nie gelesen, und daher schlägt der Vorgang fehl, da Feign/Ribbon keinen einzigen Server zu verwenden hat.

Was mache ich hier falsch?

Mein Feign Client:

@FeignClient(name="foo-service") 
public interface FooFeignClient { 

    @RequestMapping(value = "/perform-check", method = POST) 
    ResponseEntity<FooResponse> performCheck(FooRequest fooRequest); 

} 

In bootstrap.yml:

foo-service: 
    ribbon: 
     eureka: 
     enabled: false 
     listOfServers: foobox1,foobox2,foobox3 

Wie der Feign Client im Frühjahr Boot-Anwendung konfiguriert ist:

@SpringBootApplication 
@EnableEurekaClient 
@EnableDiscoveryClient 
@EnableHazelcastClient 
@EnableFeignClients 
@RibbonClients({ 
    @RibbonClient(name = "foo-service", configuration = MyApp.FooServiceRibbonConfig.class) 
}) 
public class MyApp { 

    public static void main(String[] args) { 
     SpringApplication.run(MyApp.class, args); 
    } 

    .... 

    @Configuration 
    static class FooServiceRibbonConfig { 

     @Bean 
     @ConditionalOnMissingBean 
     public IClientConfig ribbonClientConfig() { 
     DefaultClientConfigImpl config = new DefaultClientConfigImpl(); 
     config.loadProperties("foo-service"); 
     return config; 
     } 

     @Bean 
     ServerList<Server> ribbonServerList(IClientConfig config) { 
     ConfigurationBasedServerList serverList = new ConfigurationBasedServerList(); 
     serverList.initWithNiwsConfig(config); 
     return serverList; 
     } 
    } 
} 
+0

'listOfServers' ist Groß-und Kleinschreibung und sollte' ListOfServers' sein. – spencergibb

+0

@spencergibb 'ListOfServers' hat auch nicht funktioniert. Ich habe versucht, den Rat hier zu folgen https://github.com/spring-cloud/spring-cloud-netflix/issues/325 – vegemite4me

+0

Sie müssen ein Beispielprojekt zur Verfügung stellen, das das Problem neu erstellt. – spencergibb

Antwort

0

Der einfachste Weg, erreichen Sie Ihre Bedürfnisse ist ..

Entfernen Sie in Ihrem Code den gesamten Code für FooServiceRibbonConfig wie unten.

@SpringBootApplication 
@EnableEurekaClient 
@EnableDiscoveryClient 
@EnableHazelcastClient 
@EnableFeignClients 
}) 
public class MyApp { 

    public static void main(String[] args) { 
     SpringApplication.run(MyApp.class, args); 
    } 
    .... 
} 

Und dann ändern Sie Ihre Profildateien wie unten.

foo-service: 
    ribbon: 
     NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList 
     listOfServers: foobox1,foobox2,foobox3 

definieren ribbonServerList Bohne wie Sie haben, ist eine weitere Möglichkeit, das zu erreichen, und ich bin nicht sicher, warum der Code nicht ausgeführt wird. In meinem Fall funktioniert ein ähnlicher Code wie deiner gut. Aber es gibt einen einfacheren Weg, also versuche es bitte.

+0

Ich bekomme die gleiche Ausnahme: 'java.lang.RuntimeException: com.netflix.client.ClientException: Load Balancer hat keinen Server für Client: foo-service'. Es ist, als würde die YML-Datei überhaupt nicht gelesen. – vegemite4me

Verwandte Themen