代码在:
https://gitee.com/sleepforests/spring-cloud-gateway-demo
灰度发布使用scg的Weight实现,需要配置2个规则,A规则对应prod是线上服务,B规则对应canary是需要灰度的服务。
用户选择灰度发布后,填写灰度
支持灰度的配置
spring:
application:
name: cloud-gateway
cloud:
gateway:
routes:
- id: service1
uri: lb://service1
predicates:
- Path=/test
- Weight=servicew1, 90
- id: service1_canary
uri: lb://service1_canary
predicates:
- Path=/test
- Weight=servicew1, 10
注意:
Weight=servicew1,90 和 Weight=servicew1, 10 这个就是权重的路由表,其中servicew1表示一组服务,需要唯一。
老的prod服务ribbon配置 9000和9001
service1:
ribbon:
listOfServers: localhost:9001,localhost:9000
新发布的灰度服务ribbon配置 9002
service1_canary:
ribbon:
listOfServers: localhost:9002
结合发布系统,提供api接口,对于已经存在的服务service1,比如已经存在XYZ3台服务,选择灰度发布X服务。
1)先下线服务X;通过动态路由修改下线X
2)发布服务X代码,重启服务X;通过部署系统完成
3)增加一个route serivce1_canary 配置,和原来service1配置类似,增加权重,将流量导入1%;
4)逐步提高X的流量权重,查看服务X日志;
5)灰度完成,修改service1的配置,去掉canary路由规则;
6)end
使用到了2个过滤器
WeightRoutePredicateFactory
PrefixPathGatewayFilterFactory