ribbon使用eureka的meta进行动态路由

应用eureka的元数据音信,再配上ribbon的路由成效,就足以在api-gateway落到实处无数效果,比如灰度测试、生产调节和测试等等。下边介绍一下,怎么选择jmnarloch大神提供的ribbon-discovery-filter-spring-cloud-starter,利用简易的几行代码解决那全部。

选取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>

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

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的话,则私下认可全部同名的服务都会被路由到。

路由

@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


想赢得最新资源新闻,请关切微信公众号

亚洲城ca88手机网页版 1

亚洲城ca88手机网页版,qrcode_for_gh_121b87c80448_258.jpg

做客要求在header上钦点tag

doc

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图