Skip to content

如何自定义实现基于域名前缀的蓝绿灰度发布

HaojunRen edited this page May 31, 2024 · 10 revisions

本文档只适用于Discovery 6.18.0及以上版本的集成方式

基于域名前缀的全链路蓝绿灰度发布逻辑

  • 蓝绿发布
当外界请求的域名为a.nepxion.com,执行新版本路由
当外界请求的域名为b.nepxion.com,执行旧版本路由
  • 灰度发布
当外界请求的域名为a.nepxion.com,执行新旧版本路由的某一种百分比
当外界请求的域名为b.nepxion.com,执行新旧版本路由的另一种百分比

实现基于域名前缀的蓝绿灰度发布的功能,需要继承RouteFilter

下面代码只适用于Spring Cloud Gateway和Zuul网关,继承DefaultGatewayStrategyRouteFilter、DefaultZuulStrategyRouteFilter,覆盖掉目标方法,通过@Bean方式覆盖框架内置的过滤类

Spring Cloud Gateway网关过滤器

public class MyGatewayStrategyRouteFilter extends DefaultGatewayStrategyRouteFilter {
    @Autowired
    private GatewayStrategyContextHolder gatewayStrategyContextHolder;

    // 把域名前缀转化成蓝绿灰度条件表达式中的驱动参数
    @Override
    public Map<String, String> getExternalHeaderMap() {
        String host = gatewayStrategyContextHolder.getURI().getHost();
        String domain = host.substring(0, host.indexOf("."));
        
        Map<String, String> externalHeaderMap = new HashMap<String, String>();
        externalHeaderMap.put("domain", domain);
        
        return externalHeaderMap;
    }
}

在配置类里@Bean方式进行过滤类创建,覆盖框架内置的过滤类

@Bean
public GatewayStrategyRouteFilter gatewayStrategyRouteFilter() {
    return new MyGatewayStrategyRouteFilter();
}

Zuul网关过滤器

只需要把上述代码extends DefaultGatewayStrategyRouteFilter换成extends DefaultZuulStrategyRouteFilter,用法、功能和代码则基本一致




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally