0

@FeignClient第一次尝试在一个简单的 REST 客户端测试应用程序中使用。我想使用 Ribbon 在两个服务器实例之间进行负载平衡,但不使用 Eureka。按照文档,我已经配置了我application.ymllistOfServers属性并禁用了 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功能区正在拾取:

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),所以我显然在这里错过了一些东西。

谁能指出我正确的方向?

谢谢,

抢。

4

1 回答 1

1

所以我们发现问题是我试图访问一个安全的资源,但没有在我的假客户端前面加上 https。

@FeignClient("https://ds")

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

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

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

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

感谢@Dave Syer 的支持

于 2016-03-08T16:31:03.717 回答