原理分析之预发布灰度发布
spring cloud gateway默认的负载均衡实现类在:org.springframework.cloud.gateway.filter.LoadBalancerClientFilter.java
中
- 解析出请求路径中的scheme
- 如果scheme不是以
lb
协议开头直接跳过 - 如果scheme以
lb
协议开头,则说明需要进行负载均衡,选出一台微服务实例
其中第4步是由来完成的,我们只要分别继承LoadBalancerClientFilter
和RibbonLoadBalancerClient
,然后重写其中的方法就能完成自定义负载均衡。
其业务逻辑如下:
- 选出对应的所有服务器实例
- 将服务器实例进行分类,分别放进
预发布List
,灰度List
,非预发布List
中 - 如果
预发布List
,灰度List
都为空,表示没有开启任何预发/灰度服务,直接使用父类的负载均衡策略 - 如果是从预发布域名访问过来,则认为是预发布请求,选出预发服务器
- 最后剩下的是正常用户,正常用户不能走预发环境
- com.gitee.sop.gatewaycommon.gateway.filter.SopLoadBalancerClientFilter
- com.gitee.sop.gatewaycommon.gateway.loadbalancer.SopLoadBalancerClient
- com.gitee.sop.gatewaycommon.gateway.loadbalancer.GatewayLoadBalanceServerChooser