Spring Data REST链接和Ribbon Client负载均衡器

时间:2016-01-14 14:40:10

标签: load-balancing spring-data-rest spring-cloud hateoas netflix-eureka

我们使用两个微服务(苹果和香蕉),一个注册服务器(注册表)和一个GUI客户端(客户端)。

微服务使用Spring Data Rest公开其资源,因此表示苹果列表的HAL资源中的单个资源的链接可能如下所示:

"link_": "http://localhost:8080/apples/123", or "http://192.168.0.23/..." 

,取决于我如何访问列表。

GUI中的restTemplate(由功能区备份)可以管理接收列表时的第一个呼叫,因为我手动使用地址

http://apple/apples

功能区现在会查找 apple 客户端ID,并将请求地址更改为“http://localhost:8080/apples”。

但现在我无法遍历检索到的链接,因为它们不再指向客户端ID,也不会进行任何负载平衡。此外,如果此特定实例将死亡,则链接中的URL将无效,即使其他实例仍在运行。

有没有办法将Spring Data REST放入固定值链接的主机更改?

2 个答案:

答案 0 :(得分:1)

目前不是。在使用Spring Data Rest的our sample中,我们遇到了同样的问题。这个PR刚刚合并,可能有所帮助。

答案 1 :(得分:1)

我包装了Spencer Gibb的RibbonClientHttpRequestFactory来欺骗Spring Data REST。我不会推荐这个解决方案,它只是暂时的。

template.setRequestFactory((uri, httpMethod) -> {
    final ClientHttpRequest request = ribbonClientHttpRequestFactory.createRequest(uri, httpMethod);
    if (!uri.equals(request.getURI()))
        request.getHeaders().add("X-Forwarded-Host",uri.getHost());
    return request;
});