日常应用中一般会使用配置中心,
feature-flag
结合配置中心可以很好的实现灰度信息的热更新,达到修改好立马生效的效果,配置中心一般使用Nacos
或者Apollo
。
增加feature-flag
的依赖
pom.xml
增加以下依赖:
<dependency>
<groupId>cn.zzq0324</groupId>
<artifactId>feature-flag</artifactId>
<version>1.0.1</version>
</dependency>
增加配置
项目配置中增加以下配置信息:
# 灰度开关描述
flags.$flagName.desc=控制xxx是否开启
# 灰度开始时间,留空默认不限制开始时间
flags.$flagName.startTime=2021-06-12 01:02:03
# 灰度结束时间,留空默认不限制开始时间
flags.$flagName.endTime=
# 灰度白名单,允许为空
flags.$flagName.whiteList=u1,u2,u3
# 灰度黑名单,允许为空
flags.$flagName.blackList=
# 灰度比例
flags.$flagName.launchPercent=95
上面的配置中,$flagName
可以替换成自己的灰度名称,例如enable-open-search
。为保证规范性,名称尽量以enable-
开头,便于管理。
如果配置是基于配置中心(例如
Nacos
或者Apollo
),则修改后灰度的值会自动热更新,达到随时开启的效果。
使用说明
场景一:同个业务id严格控制每次执行结果一致
FeatureFlagHelper.isFeatureOn("$flagName", "$bizId");
场景二:控制流量整体趋势符合灰度比例,同个业务id执行结果不要求强一致
FeatureFlagHelper.isFeatureOn("$flagName");
场景三:获取灰度实例并根据扩展信息做额外的逻辑处理
// 获取灰度实例
FeatureFlagInstance instance = FeatureFlagHelper.getFeatureFlagInstance("$flagName");
// 获取扩展信息
String extra = instance.getExtra();
if(FeatureFlagHelper.isFeatureOn("$flagName")) {
// 处理业务逻辑
}