Gateway使用简介
Gateway使用简介
JaronGateway
网关路由的作用
网关(Gateway)是微服务架构中重要的一环,用于实现请求的统一入口。Spring Cloud Gateway 是基于 Spring WebFlux 构建的高效网关,支持动态路由、限流、过滤、熔断等功能。
网关路由的核心功能:
- 路由转发:根据请求路径、参数、Header 等规则将请求转发到对应的微服务。
- 负载均衡:与注册中心(如 Nacos、Eureka)集成,实现服务发现与负载均衡。
- 统一入口:对外暴露一个公共的 API 网关 URL,隐藏微服务内部细节。
- 增强功能:支持请求过滤、鉴权、限流、熔断等功能。
使用 Spring Cloud Gateway 实现简单路由
以下是一个网关路由的完整使用示例。
场景描述
- 系统中有两个服务:
- user-service:提供用户服务。
- order-service:提供订单服务。
- 使用 Gateway 实现以下功能:
- 访问
/user/**路径时转发到user-service。 - 访问
/order/**路径时转发到order-service。
- 访问
1. 准备工作
1.1 引入依赖
在 Gateway 网关服务的 pom.xml 中引入以下依赖:
1 | <dependency> |
2. 配置路由规则
在 Gateway 服务的 application.yml 中配置路由规则。
2.1 基于静态路由的配置
1 | spring: |
配置说明:
id:路由规则的唯一标识。
uri:路由目标服务地址,lb:// 表示使用负载均衡,后面是微服务的名称(需要和注册中心保持一致)。
predicates:路由条件,Path 表示匹配路径规则。
discovery.locator.enabled 的作用
在 Spring Cloud Gateway 中,discovery.locator.enabled 是一个非常重要的配置项。它的作用是 启用服务发现自动路由功能。通过这个配置,Spring Cloud Gateway 可以自动从服务注册中心(如 Nacos、Eureka)中发现已经注册的微服务,并为这些微服务动态创建路由,而无需手动为每个微服务单独配置路由规则。
工作原理
当
spring.cloud.gateway.discovery.locator.enabled设置为true时,网关会自动从服务注册中心获取所有已注册的微服务信息。对于每个已注册的微服务,Spring Cloud Gateway 会自动生成一条默认的路由规则:
- 默认路由的 URI 为 lb://服务名称,表示通过负载均衡访问该服务。
- 默认路由的 路径 为 /服务名称/**,表示所有以 /服务名称/ 开头的请求都会被转发到该服务。
3. 注册中心与服务注册
确保 user-service 和 order-service 服务已经注册到 Nacos 注册中心,并正确启动。
在 user-service 和 order-service 的 application.yml 文件中配置如下(示例):
1 | spring: |
当服务启动后,会自动注册到 Nacos。
4. 启动 Gateway 网关服务
在 Gateway 服务的启动类中,添加注解 @EnableDiscoveryClient,启用服务注册功能。
1 |
|
5. 验证路由功能
启动 Nacos 注册中心。
启动 user-service 和 order-service 服务。
启动 Gateway 网关服务。
访问以下地址:
访问用户服务:
http://localhost:8080/user/1
Gateway 会将请求转发到 user-service,返回用户信息。
访问订单服务:
http://localhost:8080/order/123
Gateway 会将请求转发到 order-service,返回订单信息。
6. 增强网关功能
6.1 添加过滤器
Spring Cloud Gateway 支持全局过滤器和路由级别的过滤器,用于实现请求增强功能(如鉴权、日志记录等)。
示例:在 /user/** 路由上添加一个请求头。
1 | spring: |
6.2 全局过滤器
全局过滤器适用于所有路由,可以通过编写自定义过滤器来实现。
1 |
|
6.3 限流功能
Spring Cloud Gateway 内置了限流功能,可以通过 RedisRateLimiter 实现简单的令牌桶限流。
1 | spring: |
7. 总结
Spring Cloud Gateway 提供了强大的网关功能:
路由转发:通过简单的配置即可实现微服务间的路由规则。
服务发现:结合注册中心(如 Nacos)实现动态路由。
增强功能:支持过滤器、限流、鉴权等功能。
易于扩展:可以编写自定义过滤器,满足复杂业务需求。
通过 Gateway,可以实现微服务的统一入口管理,让整个系统架构更加灵活、高效。
