0.参考
1.思路
改造gataway的### Weight Route Predicate Factory,在指定权重的同时指定每个对应权重的服务的版本号。主要需要改写的地方是要在分流之后,将版本号传给ribbon,ribbon在做负载均衡选择的时候,根据传入的版本号,与服务的eureka.matedata中的version匹配,从而达到灰度发布的目的。
gateway的配置类似如下,VersionWeight为重写的断言工厂。- id: temp_old
uri: lb://TEMPLATE
predicates:
- Path=/temp/**
- VersionWeight=group1, 10, v1
filters:
- StripPrefix=1
- id: temp_new
uri: lb://TEMPLATE
predicates:
- Path=/temp/**
- VersionWeight=group1, 1, v2
filters:
- StripPrefix=1
2.调查改造点
debug后知道了整个请求顺序客户端-> gateway filter -> LoadBalancerClientFilter -> (如果使用ribbon) RibbonLoadBalancerClient-> (某个Rule) XXXAvoidanceRule -> (对应的 Predicate) XXXAvoidancePredicate
所以选择的服务的关键就是Ribbon的rule和Predicate
步骤写一个grayContext, 基于threadloc