3

使用eureka的元数据信息,再配上ribbon的路由功能,就可以在api-gateway实现很多功能,比如灰度测试、生产调试等等。下面介绍一下,怎么使用jmnarloch大神提供的ribbon-discovery-filter-spring-cloud-starter,利用简单的几行代码搞定这一切。

maven

        <dependency>
            <groupId>io.jmnarloch</groupId>
            <artifactId>ribbon-discovery-filter-spring-cloud-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

eureka元数据配置

eureka:
  instance:
    metadataMap:
      tag: pre-prod

路由

@Component
public class DynamicRoutesFilter extends ZuulFilter {

    private static final Logger LOGGER = LoggerFactory.getLogger(DynamicRoutesFilter.class);

    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        String tag = request.getHeader("tag");
        if(tag != null){
          RibbonFilterContextHolder.getCurrentContext().add("tag", tag);
        }
        return null;
    }
}

根据请求的tag,路由到标记有指定tag值的服务。注意,如果请求不指定tag,则代码需要判空一下,另外不指定tag的话,则默认所有同名的服务都会被路由到。

doc


想获取最新资讯,请关注微信公众号

图片描述


codecraft
11.9k 声望2k 粉丝

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留下...