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 网关就配置完成了,可以接收客户端的请求,并根据路由规则将请求转发到相应的微服务。