2015-03-26 10 views
14

Mein Ziel ist es, eine Strategie von verschiedenen Schritten zu erstellen, um von einer Punkt-zu-Punkt-Kommunikation zwischen 2 Komponenten zu einer "Full-blast Netflix" Art der Kommunikation mit Eureka, Ribbon, Hystrix. Mit jeder Iteration möchte ich mehr hinzufügen, während ich versuche, die Anzahl der Änderungen am eigentlichen Code zu begrenzen. Feign ist mein bevorzugtes clientseitiges Framework, um dies zu ermöglichen. Erster Schritt ist eine FeignClient zu schaffen, um den Server zu kommunizieren:Kann ich eine @FeignClient-URL mithilfe einer Datei mit den Eigenschaften/yml konfigurieren?

@FeignClient(url = "http://localhost:9000") 
interface Client { 
    @RequestMapping(method = RequestMethod.GET, value = "/author/{author}/addedValue/{addedValue}") 
    Result addToTotal(@RequestParam(value="author") String author, @RequestParam(value="addedValue") long addedValue); 
} 

Dies funktioniert, aber ich mag nicht, dass die URL in der Anmerkung fest einprogrammiert werden. Ich möchte diese haben: @FeignClient() und haben eine Eigenschaften konstruieren wie: client.url: http://localhost:9000

Bisher konnte ich keine Hinweise finden, wie das konfigurieren, und ich konnte keine Lösung finden in den Quellen der Quellwolken.

Kann es gemacht werden und wenn ja; Wie?

Antwort

25

Es kann mit einer "serviceId" statt einer "URL" erfolgen. Z.B.

@FeignClient("foo") 
interface Client { ... } 

und

foo.ribbon.listOfServers: localhost:9000 

z.B. siehe http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-ribbon-without-eureka für Dokumente.

@FeignClient(name="fd-mobileapi-service",url="${fdmobile.ribbon.listOfServers}") 

Wo fdmobile.ribbon.listOfServers : value eine Eigenschaft in application.properties ist:

+0

Danke !!! Das löst es! (Ich wusste nicht, dass die .properties Groß- und Kleinschreibung beachten) –

+0

Im Allgemeinen ist es nicht, wenn es verwendet wird, um Spring Boot '@ ConfigurationPoperties' zu binden, aber das ist immer noch Netflix nativ. –

+1

Ich habe es versucht, aber ich habe den folgenden Fehler: 'com.netflix.client.ClientException: Load Balancer hat keinen verfügbaren Server für Client: foo'. Hinweis: Ich benutze eine 'application.yml' und nicht 'application.properties' – Pleymor

8

Dies kann wie folgt durchgeführt werden.

Ich habe es getestet und es funktioniert.

Verwandte Themen