springcloud gateway动态路由

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.路由转发性能

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

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

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Gateway动态路由是指在Spring Cloud Gateway网关中,路由规则可以在运行时动态地进行添加、删除、修改等操作。相比于静态路由,动态路由可以根据实际情况进行动态调整,从而更加灵活、方便地进行流量控制和负载均衡。例如,在服务上线、下线或者进行扩容缩容的时候,可以通过修改路由规则,动态地将流量引导到不同的服务实例中,从而实现动态负载均衡和容错能力。 ### 回答2: Spring Cloud Gateway动态路由是指在Spring Cloud Gateway网关中,根据某些条件动态地将请求路由到不同的目标服务实例上。传统的静态路由需要事先配置好路由规则,但是在微服务架构中,服务的实例会动态地增加、减少、更新,因此需要一种能够动态适应变化的路由机制。 Spring Cloud Gateway动态路由的实现需要依赖于服务注册与发现组件,比如Eureka或Consul。当服务实例注册到服务注册中心时,Spring Cloud Gateway会订阅服务注册中心的变化,当有新的服务实例上线或下线时会自动更新路由规则。 动态路由可以根据多种条件进行判断和匹配,如路径、域名、Header、请求参数等。可以根据业务需求动态地配置路由规则,使得请求能够被准确地路由到目标服务实例上。动态路由能够实现动态扩展和负载均衡,提高系统的灵活性和可伸缩性。 Spring Cloud Gateway动态路由的配置通常以YAML或JSON的形式进行,可以通过配置文件、配置中心或接口的方式进行配置。支持多种动态路由的配置方式,如断言(Predicate)、过滤器(Filter)、转发(Forwarding)、重定向(Redirecting)等,可以根据具体需求实现各种功能。 总之,Spring Cloud Gateway动态路由是一种能够根据条件动态路由请求到不同服务实例的机制,具有灵活、可扩展、高效的特点,是构建微服务架构中的网关的重要特性。 ### 回答3: Spring Cloud Gateway动态路由是一种基于Spring Cloud Gateway框架的动态路由功能。传统的静态路由是在网关的配置文件中预先定义好所有的路由规则,而动态路由可以在运行时根据业务需要实时插入、修改和删除路由规则,实现灵活的请求转发和负载均衡。通过动态路由,可以根据不同的路径或者请求头等匹配条件,将请求转发到指定的目标服务,从而实现微服务架构中的请求路由和负载均衡功能。动态路由的配置可以通过网关的API接口或者命令行工具进行管理,使得路由的配置更加灵活和方便。同时,动态路由还支持动态修改和重载路由规则,可以根据实际情况动态调整路由策略,提高系统的可用性和弹性。Spring Cloud Gateway动态路由的实现是基于Spring Framework中的路由器和过滤器的概念,通过使用reactive编程模型处理请求,并且支持使用各种插件来扩展网关的功能,例如服务发现、熔断器、限流等。总之,Spring Cloud Gateway动态路由提供了一种灵活、易用且高性能的路由解决方案,适用于构建微服务架构的API网关。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值