灰度方案设计

灰度实体类

    @Data
    public static class NewSwitch{
        //是否开启灰度,true是,false否
        Boolean enable;
        //灰度基数,-1的时候默认为全部开启灰度
        Long divisor;
        //灰度比例 参数对divisor取余小于等于mod命中灰度
        Long mod;
        //白名单,优先判断白名单
        List<String> whiteList;
    }

灰度配置

# 开关配置
switchConfig:
  orderSwitch:
    #是否开启灰度,true是,false否
    enable: true
    #灰度基数,-1的时候默认为全部开启灰度
    divisor: 100
    #灰度比例 参数对divisor取余小于mod命中灰度
    mod: 1
    #白名单,优先判断白名单
    whiteList:
      - 1
      - 2

配置类

@Component
@RefreshScope
@Data
@ConfigurationProperties("switch-config")
public class SwitchConfig {

     private NewSwitch orderSwitch;
     //适用于根据指定id或标识灰度,白名单可以是用户id,手机号啥的
     public boolean isNewSwitch(NewSwitch newSwitch, Long mod, String white) {
        if(newSwitch==null){
            return false;
        }
        if(!Boolean.TRUE.equals(newSwitch.enable)){
            return false;
        }
        if(newSwitch.divisor==-1){
            return true;
        }
        if(!StringUtils.isEmpty(white)){
            if(newSwitch.whiteList.contains(white)){
                return true;
            }
        }
        if(newSwitch.divisor==0){
            return false;
        }
        if(mod==null){
            mod=getRandomNumber(newSwitch.divisor.intValue());
        }
        Long res=mod%newSwitch.divisor;
        if(res<newSwitch.mod){
            return true;
        }
        return false;
    }
    //适用于随机灰度 按配置的比例灰度
    public boolean isNewSwitch(NewSwitch newSwitch) {
        return isNewSwitch(newSwitch,null,null);
    }
    //适用于根据指定id或标识灰度
    public boolean isNewSwitch(NewSwitch newSwitch,Long mod) {
        return isNewSwitch(newSwitch,mod,null);
    }
    //有需要可以再加个白名单灰度


    @Data
    public static class NewSwitch{
        //是否开启灰度,true是,false否
        Boolean enable;
        //灰度基数,-1的时候默认为全部开启灰度
        Long divisor;
        //灰度比例 参数对divisor取余小于等于mod命中灰度
        Long mod;
        //白名单,优先判断白名单
        List<String> whiteList;
    }
}

灰度使用

public class OrderTest {
    @Autowired
    private SwitchConfig switchConfig;

    public void switchTest {      
        if(switchConfig.isNewSwitch(switchConfig.getOrderToHtapSwitch())){
            //todo  new
        }else{
            //todo  old
         }

}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值