Spring Cloud 负载均衡器中基于部署上下文的 Vip 地址

问题描述

我们希望迁移到 Spring Cloud Load Balancer 以取代 Ribbon。我们使用 Eureka 进行服务发现和注册

看起来从 Spring Cloud Netflix 3.x 开始,Eureka 客户端模块中的 EurekaRibbonClientConfiguration 已被删除

我们使用 deploymentContextBasedVipAddress 配置将我们的内部主机名映射到 Eureka 中注册的 vip 地址。

配置类似:

some-sevice-v1.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.discoveryEnablednIWSServerList
some-sevice-v1.ribbon.DeploymentContextBasedVipAddresses=some_service-v1
some-sevice-v1.ribbon.NIWSServerListFilterClassName=com.netflix.loadbalancer.ServerListSubsetFilter

我们这样做是因为在 Eureka 注册的 vip 地址中包含一个 _,这在技术上对于主机名来说是一个无效字符; Java URI 类将无法解析包含 _ 的主机。我们目前无法更改此设置。

所以我的问题是;这个类似的配置可以用 Spring Cloud Load Balancer 和 Spring Cloud Netflix 3.x 中新的 Eureka 客户端模块来完成吗,我们可以为 vip 地址提供别名?

解决方法

我们遇到了同样的问题。目前,我们正在为我们的假客户端使用以下解决方法:

@FeignClient(
    value = "${my.amazing.service.name:amazing-service-name-default}",contextId = "amazing-service",configuration = AmazingServiceClientConfiguration.class,path = "/amazing-service"
)
public interface AmazingServiceClient {
  ...
}

我们可以像 my.amazing.service.name 一样配置 DeploymentContextBasedVipAddresses

此问题还有一个未解决的票证:https://github.com/spring-cloud/spring-cloud-commons/issues/951

希望,这会有所帮助。