Spring Cloud:缺少使用 Ribbon 和 Feign 客户端(但不是 Eureka)的服务器实例

Spring Cloud: Missing Server Instance using Ribbon and Feign Client (but not Eureka)

我第一次尝试在简单的 REST 客户端测试应用程序中使用 @FeignClient。我想使用 Ribbon 在两个服务器实例之间进行负载平衡,但不使用 Eureka。按照文档,我用 listOfServers 属性 配置了我的 application.yml 并禁用了 Eureka。我的客户端的名称与 ribbon 属性的 YAML 前缀相同。

application.yml:

ds:
  ribbon:
    listOfServers: server1:18201,server2:18201

客户代码:

@FeignClient("ds")
public interface DataServicesClient {
  @RequestMapping(method = RequestMethod.GET, value = "/context-path/customers")
  List<Customers> getCustomers();
}

当我调用应用程序时,我可以看到 listOfServers 被 Ribbon 拾取:

2016-03-07 12:15:17.275  INFO 39948 --- [nio-8081-exec-1] 
    c.n.l.DynamicServerListLoadBalancer      : DynamicServerListLoadBalancer for client ds 
    initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=ds,current list of 
    Servers=[server1:18201, server2:18201]

然而,客户端随后仅使用没有服务器前缀的 @RequestMapping 注释的值进行调用,显然失败了。

2016-03-07 12:15:21.394 ERROR 39948 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[/].
    [dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context 
    with path [] threw exception [Request processing failed; nested exception is 
    feign.RetryableException: Unexpected end of file from server executing GET 
    http://context-path/customers] with root cause
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)

我原以为它会依次注入每个服务器 (http:{server instance}/context-path/customers),所以我显然在这里漏掉了一些东西。

谁能给我指出正确的方向?

谢谢,

抢.

所以我们发现问题是我试图访问受保护的资源,但没有为我的假客户端添加 https 前缀。

@FeignClient("https://ds")

我可能有点天真,但我没有发现错误真的很好地解释了问题:

java.net.SocketException: Unexpected end of file from server

我还希望所选的服务器实例出现在错误消息中,但看起来我们只是获得了客户端名称。这让我相信服务器被简单地省略了,但我想这只是学习曲线的一部分。

无论如何,问题现在已经解决,它只使用 @EnableFeignClients 注释,不需要 Feign.builder().

感谢@Dave Syer 的支持