SpringCloudGateway:统一网关


目录
  • 什么是网关?
  • 快速搭建网关服务
  • Route Predicate Factory(路由断言工厂)
  • GatewayFilter(路由过滤器)


什么是网关?

网关功能

  • 身份认证和权限校验
  • 服务路由、负载均衡
  • 请求限流

网关的技术实现

  • 在 SpringCloud 中网关的实现包括两种:

    • gateway
    • zuul
  • Zuul 是基于 Servlet 的实现,属于阻塞式编程;而 SpringCloudGateway 则是基于 Spring5 中提供的 WebFlux,属于响应式编程的实现,具备更好的性能。


快速搭建网关服务

网关搭建步骤:

  • 创建项目,引入 nacos 服务发现和 gateway 依赖。
  • 配置 application.yml,包括服务基本信息、nacos 地址、路由。

路由配置包括:

  • 路由 id:路由的唯一标识。
  • 路由目标(uri):路由的目标地址。其中 http 代表固定地址,lb 代表根据服务名负载均衡。
  • 路由断言(predicates):判断路由的规则。
  • 路由过滤器(filters):对请求或响应做处理。

1)创建新的模块(项目),引入 SpringCloudGateway 的依赖和 nacos 的服务发现依赖:



    org.springframework.cloud
    spring-cloud-starter-gateway



    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery

2)编写路由配置及 nacos 地址

server:
  port: 10010  # 网关端口
spring:
  application:
    name: gateway  # 服务名称
  cloud:
    nacos:
      server-addr: localhost:8848  # nacos地址
    gateway:
      routes:  # 网关路由配置
        - id: user-service  # 路由id,自定义,只要唯一即可
          # uri: http://127.0.0.1:8081  # 路由的目标地址。http 表示固定地址
          uri: lb://userservice  # 路由的目标地址。"lb"表示负载均衡,后面跟服务名称
          predicates:  # 路由断言,也就是判断请求是否符合路由规则的条件
            - Path=/user/**  # 这个是按照路径匹配,只要以 /user/ 开头就符合要求

3)请求效果:


Route Predicate Factory(路由断言工厂)

网关路由可以配置的内容包括:

  • 路由 id:路由唯一标识。
  • uri:路由目的地,支持 lb 和 http 两种。
  • predicates:路由断言规则,用于判断请求是否符合要求,符合则转发到路由目的地。
  • filters:路由过滤器,用于处理请求或响应。

Route Predicate Factory:

  • 我们在配置文件中写的断言规则只是字符串,这些字符串会被 Predicate Factory 读取并处理,转变为路由判断的条件。
  • 例如Path=/user/**表示按照路径匹配(以 /user 开头则表示断言成功)
    ,这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory 类来处理的。
  • 像这样的断言工厂在 SpringCloudGateway 还有十几个。

Spring 提供了 11 种基本的 Predicate 工厂:


GatewayFilter(路由过滤器)

GatewayFilter 是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

Spring 提供了 31 种不同的路由过滤器工厂(GatewayFilterFactory)。例如: