我们使用两个微服务(苹果和香蕉),一个注册服务器(注册表)和一个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放入固定值链接的主机更改?
答案 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;
});