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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM