Section 13: 实现 API 网关 (06:12:24 - 06:24:30)
项目设置和依赖 (06:12:24 - 06:12:24)¶
我们将使用 Spring Initializr 或 IntelliJ IDEA 创建一个新的 Maven 项目。 ⏎ 添加以下依赖项:
- Spring Cloud Gateway
- Spring Cloud Starter Netflix Eureka Client (或者 Spring Cloud Starter Discovery,取决于 Spring Cloud 版本)
- Spring Cloud Starter Config
- Spring Boot Starter OAuth2 Resource Server
配置 (06:12:24 - 06:24:30)¶
接下来,我们将配置 API 网关。在 src/main/resources/application.yml 文件中,添加以下配置: ⏎
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: customer-service
uri: lb://customer-service
predicates:
- Path=/api/v1/customers/**
- id: order-service
uri: lb://order-service
predicates:
- Path=/api/v1/orders/**
- id: order-lines
uri: lb://order-service
predicates:
- Path=/api/v1/order-lines/**
- id: product-service
uri: lb://product-service
predicates:
- Path=/api/v1/products/**
- id: payment-service
uri: lb://payment-service
predicates:
- Path=/api/v1/payments/**
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://localhost:9098/realms/microservices
请注意以下几点:
spring.cloud.gateway.discovery.locator.enabled: 设置为true,以启用服务发现功能。spring.cloud.gateway.routes: 定义了路由规则。每个路由包含以下信息:id: 路由 ID,通常与微服务的服务名称相同。uri: 目标 URI,使用lb://协议表示使用负载均衡,后面跟上微服务的服务名称。predicates: 断言,用于匹配请求路径。只有满足断言的请求才会被路由到指定的微服务。
spring.security.oauth2.resourceserver.jwt.issuer-uri: 指定 JWT 颁发者的 URI,指向 Keycloak 服务器的 Realm。
完成了以上配置后,API 网关就配置完成了,可以接收客户端的请求,并根据路由规则将请求转发到相应的微服务。 ⏎