Spring Cloud:使用功能区和假设客户端(但不是Eureka)丢失服务器实例

时间:2016-03-07 12:29:56

标签: spring-cloud spring-cloud-feign netflix-ribbon

我试图在一个简单的REST客户端测试应用程序中第一次使用@FeignClient。我想使用Ribbon来实现两个服务器实例之间的负载平衡,但不使用Eureka。根据文档,我已将application.yml配置为listOfServers属性并禁用了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();
}

当我调用应用程序时,我可以看到Ribbon {<1}}正在被选中:

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

任何人都可以指出我正确的方向吗?

谢谢,

罗布。

1 个答案:

答案 0 :(得分:1)

所以它转变为我们的问题是我试图访问一个安全的资源,但没有使用https为我的假装客户端添加前缀。

@FeignClient("https://ds")

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

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

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

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

感谢@Dave Syer的支持