我在不同的主机上运行了4个相同服务的实例。我正在按节点为该服务节点部署新版本。部署时,传入请求会根据负载均衡器转发到任何版本(主机)。在netflix中有什么方法可以将所有传入的请求转发到特定版本吗?
是否有任何通用的方法可以定义版本(对于相同的serviceId)。如果传入请求在标头中定义了版本,我们可以使用它将请求转发到特定版本。
可能是这样的:
在Zuul Proxy中,
zuul:
routes:
sample:
path: /sample/{version}/**
serviceId: sample-service
在样本服务中,
eureka:
instance:
appname: sample-service
metadataMap:
version: v1
或实现同一服务版本控制的任何其他机制?
答案 0 :(得分:5)
我认为你正朝着正确的方向前进。您可以编写自己的@RibbonClient
,它基本上是@Configuration
类,用于每项服务的负载均衡。
@RibbonClient(name = "yourServiceName", configuration = RibbonConfigForThatService.class)
。
您可以为自己的IRule
- 以及其他任何组件 - 提供该服务。有了这个,您可以根据元数据过滤可用于负载均衡的实例。
RoundRobinRule
执行简单的循环负载均衡,这是进一步需求的良好示例。