一、Gateway 的作用
Gateway 是 API 网关的核心部件。其作用是将外部请求整合到内部API,从而保证系统的安全和稳定。同时,Gateway 还可以对请求进行鉴权和限流,确保系统的可用性。
通过 Gateway 配置控制,我们可以方便地实现请求路由、限流和过滤等功能。下面我们将详细介绍 Gateway 配置的各种用法。
二、路由功能
路由功能指的是将外部请求转发到内部API的过程。通常,我们将请求转发到不同的服务中心,以实现不同的功能。
在 Gateway 中,路由功能可以通过配置 Route 进行实现。以下是一个简单的路由配置示例:
spring: cloud: gateway: routes: - id: user_service uri: lb://user-service predicates: - Path=/api/user/**
上述配置中,我们定义了一个名为 user_service 的 Route。它将请求转发到内部服务 user-service 中,并且只有请求路径是 /api/user/** 的请求会匹配到这条路由规则。
三、限流功能
限流功能指的是对请求进行限制,从而避免对服务造成过大的压力。
在 Gateway 中,限流功能可以通过配置 Filter 实现。以下是一个简单的限流配置示例:
spring: cloud: gateway: default-filters: - name: RequestRateLimiter args: key-resolver: "#{@userKeyResolver}" redis-rate-limiter.replenishRate: 1 redis-rate-limiter.burstCapacity: 2 application: name: gateway-service redis: host: localhost port: 6379
上述配置中,我们定义了一个名为 RequestRateLimiter 的 Filter。它使用 Redis Rate Limiter 对请求进行限流。限流的速率为每秒 1 次请求,最大处理能力为 2 次请求。
四、过滤功能
过滤功能指的是对请求进行过滤,从而达到安全过滤、业务过滤和性能优化等效果。
在 Gateway 中,过滤功能可以通过配置 Global Filter 和 Route Filter 实现。以下是一个简单的过滤配置示例:
spring: cloud: gateway: routes: - id: user_service uri: lb://user-service predicates: - Path=/api/user/** filters: - name: AuthFilter args: token: test-token application: name: gateway-service
上述配置中,我们同时使用了全局过滤和路由过滤。全局过滤是指对所有请求都起作用的过滤器,而路由过滤是指只对特定路由的请求起作用的过滤器。
在上述配置中,我们定义了一个名为 AuthFilter 的过滤器,并设置了一个名为 token 的参数。该过滤器将会对所有经过 user_service 路由的请求进行安全过滤。
五、优化建议
在使用 Gateway 进行配置时,我们需要注意以下几点:
- 尽量使用 Route 而不是 Filter,因为 Route 比 Filter 更加灵活。
- 遵守 SOLID 原则,将 Filter 拆分成一个个小的、可复用的 Filter。
- 使用 WebFlux,因为它能够较好地支持 Reactor、Netty 以及 Spring Boot 2.x。
- 使用 Spring Cloud Admin 来进行监控和管理。