Skip to content

如何自定义过滤器触发蓝绿灰度发布

HaojunRen edited this page Oct 18, 2022 · 2 revisions

全链路自定义过滤器触发蓝绿灰度发布,包括八种维度,分别是版本、区域、环境、IP地址和端口、版本权重、区域权重、全局唯一ID黑名单、IP地址和端口黑名单。本文档以版本为例

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

public String getRouteVersion();

Spring Cloud Gateway网关过滤器

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

Zuul网关过滤器

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

微服务过滤器

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




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally