spring-cloudnetflix-feign

Can I configure a @FeignClient url using a properties/yml file?


My goal is to create a strategy of different steps to get from a point-to-point communication between 2 components to a "full blown netflix" style of communication using eureka, ribbon, hystrix. With each iteration I want to add more while I try to limit the amount of changes to the actual code. Feign is my preferred client side framework to make this happen. First step is to create a FeignClient to communicate to the server:

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

This works but I don't want the URL to be hardcoded in the annotation. I would like to have this: @FeignClient() and have a properties construct like: client.url: http://localhost:9000

So far I couldn't find any clues on how to configure that and I couldn't find a solution in the spring-cloud sources.

Can it be done and if yes; how?


Solution

  • It can be done with a "serviceId" instead of a "url". E.g.

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

    and

    foo.ribbon.listOfServers: localhost:9000
    

    e.g. see http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-ribbon-without-eureka for docs.