当前位置:   article > 正文

springcloud gateway动态路由_springcloudgateway动态路由

springcloudgateway动态路由

1.1 spingcloud gateway简介

Spring Cloud Gateway是Spring出品的SpringCloud微服务体系中的API Gateway,基于Spring5、Project Reactor、WebFlux构建的一个高效的非阻塞式网关,提供了以下功能:

a.可以根据所有的请求属性作为路由条件(Routing Predicates)

b.提供了作用于指定路由的网关过滤器(Gateway Filter)

c.提供了作用于所有路由的全局过滤器(Global filter)

d.提供了断路器集成(Circuit Breaker)

e.提供了服务发现集成(Discovery Client)

f.提供了限流组件集成(Rate Limiting)

g.路径重写(Path Rewriting)

1.2 Gateway工作原理

Gateway 工作原理如下图(主要涉及红框部分)

图片

客户端请求,首先会被Gateway Handler Mapping处理,用以在路由表 中查找一个与请求匹配的路由 ,然后将请求交由Web Handler处理,Web Handler 维护了一个过滤器链,链式执行这些过滤器,这些过滤器在逻辑上存在两个执行阶段 pre与 post 。

核心类RoutePredicateHandlerMapping

图片

1.3动态路由

何谓动态路由

动态路由:在不进行网关应用重启的情况下,可以通过管理 API 或者管理 UI 的方式添加路由,能实时或准实时生效;且在网关应用重启后,动态添加的路由仍然存在。

动态路由的两个基本要求:实时性和持久性。

1.4 路由定义

Route 各属性分别为:

id,路由的唯一编号可用于定义一个路由,gateway 中用,一些的过滤器会根据 id 是否属于某个集合做特定的操作;

order,路由的优先级,值越小,优先级越高(路由表按此排序);

metadata,可以定义连接超时、响应超时等参数,将来可能会拓展用途;

uri,上游地址,即 upstream,可以是一个确定的服务地址,也可以是一个 lb 开头的地址,表示可通过服务发现,发现上游节点;

filters,过滤器列表,请求根据断言命中一个路由后,会依次执行过滤列表的过滤器;

predicate,路由断言,用于判断路由是否匹配当前路由。 

图片

1.5 路由断言工作原理

  截取核心类部分源码

  a.RoutePredicateHandlerMapping

图片

b.2.RouteDefinitionRouteLocator

图片

combinePredicates 根据路由定义中的断言定义组合为路由断言

图片

根据路由定义中的断言定义,从指定断言工厂 获取一个实例化断言

1.6路由断言工厂

一个请求是否命中某个路由,最终是由路由定义中的断言定义对应的断言工厂的applyAsync 方法决定。

图片

RoutePredicateFactory

图片

每个工厂的apply都实现了如何根据配置及ServerWebExchange来判断当前请求是否匹配断言(如果需要自定义断言工厂,也需要实现此逻辑)

这里粘贴出来官方说明文档及配置示例https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories;

多读官方文档,很详细,很完整。

图片

关键字 Path 表示采用 PathRoutePredicateFactory 工厂创建该断言;

Path 后是逗号分隔的有序字符串数据,表示只要匹配任意一个 path,该断言即为真(见apply方法),路由命中。断言定义的 Name 即为断言工厂的前缀字符串。

1.7 扩展

当集群数量到达一定量级需要思考路由的性能瓶颈:

a.路由数量对性能影响

b.路由转发性能

不展开,因为本人没有生产经历此类性能问题,供探究。

欢迎关注本人公众号,一起学习进步。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/621760
推荐阅读
相关标签
  

闽ICP备14008679号