问题描述
我们希望迁移到 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
希望,这会有所帮助。