我可以使用properties/yml文件配置@FeignClient URL吗?

Fre*_*ool 26 spring-cloud netflix-feign

我的目标是创建一个不同步骤的策略,以便使用eureka,ribbon,hystrix从2个组件之间的点对点通信到"完全成熟的netflix"通信方式.每次迭代我想添加更多,同时我尝试限制实际代码的更改量.假设是我首选的客户端框架来实现这一目标.第一步是创建一个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);
}
Run Code Online (Sandbox Code Playgroud)

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

到目前为止,我找不到任何关于如何配置的线索,我无法在spring-cloud源中找到解决方案.

它可以做到,如果是的话; 怎么样?

Dav*_*yer 39

它可以使用"serviceId"而不是"url"来完成.例如

@FeignClient("foo")
interface Client { ... }
Run Code Online (Sandbox Code Playgroud)

foo.ribbon.listOfServers: localhost:9000
Run Code Online (Sandbox Code Playgroud)

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

  • @Pleymor,我有同样的问题,不得不设置`ribbon.eureka.enabled = false`来让Ribbon使用基于配置的服务器列表.我使用的是相当旧版本的Spring Cloud库(1.0.0.RELEASE)和Netflix的东西(feign-ribbon 7.1.0和功能区2.0-RC13).也许这在新版本中已经改变了 (4认同)
  • 我尝试了但是我有以下错误:`com.netflix.client.ClientException:负载均衡器没有客户端的可用服务器:foo`.注意:我使用`application.yml`而不是`application.properties` (2认同)

cod*_*123 22

这可以这样做:

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

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

我测试了它,它正在工作.

  • 这对我们来说效果很好,因为我们只需要本地环境,对于我们使用 Eureka 的其他环境,所以名称就足够了 (2认同)