Skip to content

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

Neptune edited this page Oct 18, 2022 · 10 revisions

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

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

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

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

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();
}




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally