ribbon使用eureka的meta进行动态路由
Posted 技术改变生活
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于ribbon使用eureka的meta进行动态路由的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用Ribbon 负载均衡自定义 Ribbon 配置禁用 Eureka 实现 Ribbon 调用)
SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用Ribbon 负载均衡自定义 Ribbon 配置禁用 Eureka 实现 Ribbon 调用)