那就要用到我们客户端client的rabbion组件了,这个组件主要用来调用服务实例的,而是可以实现负载均衡;那我们就可以重写负载均衡算法,实现自定义的流量权重这个需求。
具体实现就是继承ZoneAvoidanceRule
**重写Server choose(Object key),**直接上代码
public class ZoneAvoidanceRuleDecorator extends ZoneAvoidanceRule {
。。。。。。
@Override
public Server choose(Object key) {
//todo 选择的逻辑
}
}
知道了基本的原理后,就可以直接去写了。
实现原理三
另一个需求,就是我们需要考虑到在线动态的改变灰度路由的规则,而不是每次改变了规则,需要重新启动服务,这个就不对了。
这个的实现可以考虑利用nacos自身的功能。去订阅nacos的配置中心的变化,从而达到动态更新。
案例
因为篇幅原因,老顾这里只介绍一些原理,具体源代码,可以到git上面去获取,要给个star哦。
https://gitee.com/gujiachun/gray
引入依赖
1、微服务项目需引入gray-plugin-framework-starter-service项目。
com.rainbow.gray gray-plugin-framework-starter-service 1.0.0-SNAPSHOT2、网关项目需引入gray-plugin-framework-starter-gateway项目。
com.rainbow.gray gray-plugin-framework-starter-gateway 1.0.0-SNAPSHOT3、本组件推荐使用远程配置的方法,配置rule规则,现在只支持nacos配置中心。
4、组件支持全局订阅,或局部订阅。
全局订阅即:DataId = group1,Group=group1;即DataId也为group名称,这样每个微服务以及网关都只订阅的是同一个rule规则。
局部订阅即:DataId = 服务名称,Group=group1;即DataID是服务名称,即只有这个服务订阅了rule规则;其他服务不适用。
(推荐全局订阅,因为灰度发布一般针对所有的服务生效;而且规则里面可以细化到每个服务的规则)
规则说明
使用说明
1、配置nacos,在bootstrap.properties中配置nacos注册中心。
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.namespace=sit
2、在bootstrap.properties中组件需要的配置。
nacos.server-addr= s p r i n