Mon objectif est de créer une stratégie de différentes étapes pour passer d'une communication point à point entre 2 composants à un style de communication "netflix complet" en utilisant eureka, ruban, hystrix. À chaque itération, je veux en ajouter plus pendant que j'essaie de limiter la quantité de modifications apportées au code réel. Feign est mon framework côté client préféré pour y arriver. La première étape consiste à créer un FeignClient pour communiquer avec le serveur:
@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);
}
Cela fonctionne, mais je ne veux pas que l'URL soit codée en dur dans l'annotation. Je voudrais avoir ceci: @FeignClient () et avoir une construction de propriétés comme: client.url: http: // localhost: 90
Jusqu'à présent, je n'ai trouvé aucun indice sur la façon de configurer cela et je n'ai pas trouvé de solution dans les sources de printemps.
Peut-on le faire et si oui; Comment?
Cela peut être fait avec un "serviceId" au lieu d'une "url". Par exemple.
@FeignClient("foo")
interface Client { ... }
et
foo.ribbon.listOfServers: localhost:9000
par exemple. voir http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-ribbon-without-eureka pour les documents.
Cela peut être fait comme ceci:
@FeignClient(name="fd-mobileapi-service",url="${fdmobile.ribbon.listOfServers}")
Où fdmobile.ribbon.listOfServers : value
est une propriété dans application.properties
.
Je l'ai testé et ça marche.