Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 662
Freek van Gool Avatar asked Mar 26 '15 12:03

Freek van Gool


People also ask

How do you use dynamic URL in feign client?

Feign has a way to provide the dynamic URLs and endpoints at runtime. The following steps have to be followed: In the FeignClient interface we have to remove the URL parameter. We have to use @RequestLine annotation to mention the REST method (GET, PUT, POST, etc.):

What is feign URL?

Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable encoders and decoders.

How do you pass path param in feign client?

To map the path variable to a method argument in a feign client, we use the @PathVariable annotation from Spring. String getThirdService(@PathVariable(name = "id") int id); Using the annotation as such, OpenFeign will substitute the {id} part of the path with the value of the integer id.

Can we use feign client without Eureka?

Yes you can use Feign without Ribbon, All you need to do is specify the base url in your Feign Java interface class.


2 Answers

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.

like image 71
Dave Syer Avatar answered Sep 23 '22 10:09

Dave Syer


This can be done like this:

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

Where fdmobile.ribbon.listOfServers : value is a property in application.properties.

I have tested it and it is working.

like image 29
cody123 Avatar answered Sep 21 '22 10:09

cody123