36

我的目标是创建一个不同步骤的策略,从两个组件之间的点对点通信到使用 eureka、ribbon、hystrix 的“成熟的 netflix”通信风格。每次迭代时,我都想添加更多内容,同时尝试限制对实际代码的更改量。Feign 是我首选的客户端框架来实现这一点。第一步是创建一个 FeignClient 与服务器通信:

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

这可行,但我不希望在注释中硬编码 URL。我想要这个:@FeignClient() 并有一个属性构造,如:client.url: http://localhost:9000

到目前为止,我找不到有关如何配置它的任何线索,也找不到 spring-cloud 源中的解决方案。

可以吗?如果可以;如何?

4

3 回答 3

46

可以使用“serviceId”而不是“url”来完成。例如

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

foo.ribbon.listOfServers: localhost:9000

例如,请参阅http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-ribbon-without-eureka获取文档。

于 2015-03-26T12:12:02.347 回答
42

这可以这样做:

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

fdmobile.ribbon.listOfServers : value房产在哪里application.properties

我已经测试过它并且它正在工作。

于 2016-02-17T07:56:23.120 回答
0

I got a way to pass the environment variables in a very simple way interface FeignClient,

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

properties

#URL
url.client=${URL}

.env

URL=https:localhost:9000
于 2021-09-08T20:43:30.057 回答