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


    使用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的话,则默认所有同名的服务都会被路由到。

    访问需要在header上指定tag

    doc

  • 相关阅读:
    C复制字符串
    C语言分解数组
    perlCGI编程之测试环境
    linux下c语言 读取文件
    C++的组合(Composite)模式
    C#GDI+绘制多行文本和格式化文本
    shell中引号的应用
    perlCGI编程之Apache服务器安装配置
    求二叉树的深度
    perlCGI编程之页面参数传递
  • 原文地址:https://www.cnblogs.com/zhangjianbin/p/7228317.html
Copyright © 2020-2023  润新知