-
Notifications
You must be signed in to change notification settings - Fork 1.4k
如何自定义过滤器触发蓝绿灰度发布
HaojunRen edited this page May 31, 2024
·
3 revisions
全链路自定义过滤器触发蓝绿灰度发布,包括八种维度,分别是版本、区域、环境、IP地址和端口、版本权重、区域权重、全局唯一ID黑名单、IP地址和端口黑名单。本文档以版本为例
下面代码既适用于Spring Cloud Gateway和Zuul网关,也适用于微服务,继承DefaultGatewayStrategyRouteFilter、DefaultZuulStrategyRouteFilter和DefaultServiceStrategyRouteFilter,覆盖掉目标方法,通过@Bean方式覆盖框架内置的过滤类
public String getRouteVersion();
public class MyGatewayStrategyRouteFilter extends DefaultGatewayStrategyRouteFilter {
private static final Logger LOG = LoggerFactory.getLogger(MyGatewayStrategyRouteFilter.class);
private static final String DEFAULT_A_ROUTE_VERSION = "{\"discovery-guide-service-a\":\"1.0\", \"discovery-guide-service-b\":\"1.1\"}";
private static final String DEFAULT_B_ROUTE_VERSION = "{\"discovery-guide-service-a\":\"1.1\", \"discovery-guide-service-b\":\"1.0\"}";
@Value("${a.route.version:" + DEFAULT_A_ROUTE_VERSION + "}")
private String aRouteVersion;
@Value("${b.route.version:" + DEFAULT_B_ROUTE_VERSION + "}")
private String bRouteVersion;
// 自定义根据Header全链路版本匹配路由
@Override
public String getRouteVersion() {
String user = strategyContextHolder.getHeader("user");
LOG.info("自定义根据Header全链路版本匹配路由, Header user={}", user);
if (StringUtils.equals(user, "zhangsan")) {
LOG.info("执行全链路版本匹配路由={}", aRouteVersion);
return aRouteVersion;
} else if (StringUtils.equals(user, "lisi")) {
LOG.info("执行全链路版本匹配路由={}", bRouteVersion);
return bRouteVersion;
}
return super.getRouteVersion();
}
}
小贴士
如下这行代码蕴含的逻辑,是Nepxion Discovery框架内置的所有蓝绿灰度发布逻辑,意味着当自定义逻辑不满足而执行到如下这行代码的时候,即去执行内置的功能
return super.getRouteVersion();
在配置类里@Bean方式进行过滤类创建,覆盖框架内置的过滤类
@Bean
public GatewayStrategyRouteFilter gatewayStrategyRouteFilter() {
return new MyGatewayStrategyRouteFilter();
}
只需要把上述代码extends DefaultGatewayStrategyRouteFilter
换成extends DefaultZuulStrategyRouteFilter
,用法、功能和代码则基本一致
只需要把上述代码extends DefaultGatewayStrategyRouteFilter
换成extends DefaultServiceStrategyRouteFilter
,用法、功能和代码则基本一致
2017-2050 ©Nepxion Studio Apache License
- 如何对接Foundation基础平台实施收敛集成
- 如何对接DevOps运维平台实施流量管控
- 如何部署对接DevOps运维平台的控制台
- 如何对接DevOps运维平台执行半自动化蓝绿灰度发布
- 如何使用DevOps运维平台对接的公共接口
- 如何设计全链路智能编排高级蓝绿灰度发布界面
- 如何实现Windows10下GraalVM本地镜像化
- 蓝绿灰度发布
- 流量染色
- 隔离路由
- 故障转移
- 多活单元化
- 限流熔断降级权限
- 网关动态路由
- 可观测监控
- 如何操作配置中心
- 如何理解框架开关配置
- 如何理解规则策略里内容格式配置
- 如何操作网关和服务的蓝绿灰度发布规则策略配置
- 如何操作网关动态路由规则策略配置
- 如何操作Sentinel规则策略配置
- 如何实施规则策略配置和业务配置在配置中心的合并和分离
- 如何理解自动扫描目录
- 如何自定义流量管控
- 如何自定义实现组合式的防护
- 如何自定义高级配置订阅功能
- 如何自定义订阅框架事件
- 如何自定义解决业务自身跨线程上下文切换的问题
- 如何自定义重用框架内置的Swagger模块
- 如何自定义Header全链路传递
- 如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发
- 如何遵循Nepxion Discovery服务标准实现对消息队列等其它中间件全链路流量管控的二次开发