一、概述
Spring Cloud Gateway用于在SpringWebFlux或SpringWebMVC之上构建API网关。旨在提供一种简单而有效的方法来路由到API,并为它们提供额外的功能,如:安全性、监控/度量和弹性。
Spring Cloud Gateway的功能:
- 基于Spring Framework和Spring Boot构建
- 能够在任何请求属性上匹配路由。
- 谓词和筛选器是特定于路由的。
- 断路器集成。
- Spring Cloud DiscoveryClient集成
- 易于编写的谓词和筛选器
- 请求速率限制
- 路径重写
官网地址:https://spring.io/projects/spring-cloud-gateway
GitHub源码地址:https://github.com/spring-cloud/spring-cloud-gateway
二、核心概念
- Route: 路由。它由一个ID、一个目标URI、一组谓词和一组筛选器定义。如果聚合谓词为true,则匹配路由。
- Predicate:谓词,即一个Java 8函数谓词。输入类型是Spring Framework ServerWebExchange。这允许您匹配HTTP请求中的任何内容,例如标头或参数。
- Filter: 过滤器。这些是使用特定工厂构建的GatewayFilter实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。
注: 这里的Filter特指GatewayFilter。 在Spring Cloud Gateway中Filter有另种: GatewayFIlter和GlobelFilter。 其中GatewayFilter仅对配置该Filter的Route生效。而GlobelFIlter对所有的Route生效
三、工作原理
- 客户端向Spring Cloud Gateway发出请求。
- Spring Cloud Gateway通过Gateway Handler Mapping 去匹配所有路由(Route)中的谓词(Predicate)。
- 如果匹配上了,则将其发送到网关Web处理程序(Gateway Web Handler)
- 网关Web处理程序通过过滤器链来处理这些请求。过滤器链中包括对应这个路由(Route)的GatewayFilter,也包括对应所有路由(Route)的GlobelFilter
- 最终请求发送目标提供方地址(Proxied Service)
过滤器被虚线分割的原因是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有“预”过滤逻辑。然后进行代理请求。发出代理请求后,将运行“post”筛选器逻辑