Spring-cloud-gateway 提供了一个建立在Spring Ecosystem之上的API网关,包括:Spring 5,Spring Boot 2和Project Reactor。
Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到API,并为他们提供横切关注点,例如:安全性,监控/指标和弹性。
Spring-cloud-gateway 提供了一个建立在Spring Ecosystem之上的API网关,包括:Spring 5,Spring Boot 2和Project Reactor。
Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到API,并为他们提供横切关注点,例如:安全性,监控/指标和弹性。
API网关是一种用于管理API的中间层,它充当客户端和后端API之间的代理。
它提供了一个集中的入口点,允许多个客户端通过统一的接口访问多个后端服务。
以下是一些API网关的优点:
简化客户端代码:API网关提供了一个标准的接口,允许客户端在不了解每个后端服务的情况下轻松地访问它们。
安全性:API网关可以充当安全层,允许您在API和客户端之间插入身份验证和授权。此外,API网关还可以检查API请求中的有效性和完整性,从而增强安全性。
缓存:API网关可以缓存响应,以减少后端API的负载和提高性能。
限流和配额:API网关可以限制每个客户端或每个API的请求速率,以避免过度使用后端API。
监控和分析:API网关可以收集有关API使用情况的数据,以便进行监控和分析。这有助于您了解API的使用情况,并为以后的优化提供数据支持。
发送的请求以HTTP请求为主,本例就以Netty4来实现一个接收HTTP请求的服务器,并根据用户请求返回响应
/**
* Combine the {@link HttpRequest} and {@link FullHttpMessage}, so the request is a complete HTTP
* request.
*/
public interface FullHttpRequest extends HttpRequest, FullHttpMessage {
要通过Netty实现一个网关,可以遵循以下步骤:
创建一个Netty服务器。这可以使用Netty提供的Bootstrap类来完成。通过创建一个ServerBootstrap实例,你可以配置服务器的参数,例如端口、线程池和ChannelInitializer等。
在ChannelInitializer中添加一个ChannelHandler。该处理器将处理传入的数据并将其转发到下一个步骤。例如,你可以使用HttpRequestDecoder和HttpResponseEncoder等编解码器来处理HTTP请求和响应。还可以添加其他的自定义处理器。
配置网关规则。网关应该定义转发规则,例如将请求转发到后端服务器、路由请求到指定的路径或拦截请求以进行安全验证等。
实现负载均衡。如果你有多个后端服务器,则可以使用负载均衡算法将请求平均分配给每个后端服务器,以提高系统的可扩展性和稳定性。
实现监控和日志记录。可以使用Netty提供的一些工具来监控网关的性能和处理情况,并将日志记录到本地或远程存储中,以便于分析和排查问题。
上一篇文章:你连对外接口签名都不会知道?有时间还是要学习学习。
有很多小伙伴反应,对外的 API 中相关的加签,验签这些工作可以统一使用网关去处理。
说到网关,大家肯定比较熟悉。市面上使用比较广泛的有:spring cloud/kong/soul。
对外接口中的权限校验
接口调用的次数限制,频率限制
微服务网关中的负载均衡,缓存,路由,访问控制,服务代理,监控,日志等。
该项目提供了一个用于在 Spring WebFlux 之上构建 API 网关的库。
Spring Cloud Gateway 旨在提供一种简单而有效的方式来路由到 API 并为它们提供交叉关注点,例如:安全性、监控/指标和弹性。
Spring Cloud Gateway 特性:
基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0
能够匹配任何请求属性的路由。
谓词和过滤器特定于路由。
断路器集成。
Spring Cloud DiscoveryClient 集成
易于编写谓词和过滤器
请求速率限制
路径重写
有两种方法可以配置谓词和过滤器:快捷方式和完全扩展的参数。
下面的大多数示例都使用快捷方式。
名称和参数名称将在每个部分的第一句或第二句中作为代码列出。
参数通常按快捷方式配置所需的顺序列出。
快捷方式配置由过滤器名称识别,后跟等号 (=
),后跟由逗号 (,
) 分隔的参数值。
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- Cookie=mycookie,mycookievalue
Spring Cloud Gateway 将路由匹配为 Spring WebFlux HandlerMapping 基础结构的一部分。
Spring Cloud Gateway 包含许多内置的路由谓词工厂。 所有这些谓词都匹配 HTTP 请求的不同属性。
您可以将多个路由谓词工厂与逻辑和语句组合在一起。
After 路由谓词工厂接受一个参数,一个日期时间(它是一个 java ZonedDateTime)。
此谓词匹配在指定日期时间之后发生的请求。
以下示例配置了一个 after 路由谓词:
路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。
路由过滤器的范围是特定的路由。
Spring Cloud Gateway 包含许多内置的 GatewayFilter 工厂。
有关如何使用以下任何过滤器的更详细示例,请查看单元测试。
AddRequestHeader GatewayFilter 工厂采用名称和值参数。
以下示例配置 AddRequestHeader GatewayFilter:
GlobalFilter 接口与 GatewayFilter 具有相同的签名。
这些是有条件地应用于所有路由的特殊过滤器。
在未来的里程碑版本中,此界面及其用法可能会发生变化。
当请求与路由匹配时,过滤 Web 处理程序会将 GlobalFilter 的所有实例和 GatewayFilter 的所有特定于路由的实例添加到过滤器链中。
这个组合过滤器链由 org.springframework.core.Ordered 接口排序,您可以通过实现 getOrder() 方法设置该接口。