Gateway组件

87 阅读2分钟

核心概念

image.png

Gateway 的工作流程

image.png

Predicate 断言

  • Route 路由与 Predicate 断言的对应关系为“一对多”,一个路由可以包含多个不同断言。
  • 一个请求想要转发到指定的路由上,就必须同时匹配路由上的所有断言。
  • 当一个请求同时满足多个路由的断言条件时,请求只会被首个成功匹配的路由转发。

常见的 Predicate 断言如下表(假设转发的 URI 为 http://localhost:8001)。

image.png

引入

<!-- Spring cloud gateway 网关依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--Eureka 客户端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

配置predicate

spring:
  application:
    name:
      micro-geteway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true


      routes:
        - id: micro-geteway-path
          uri: lb://community-org
          predicates:
            - Path=/baseUser/**
            - Method=GET

动态路由

默认情况下,Spring Cloud Gateway 会根据服务注册中心(例如 Eureka Server)中维护的服务列表,以服务名(spring.application.name)作为路径创建动态路由进行转发,从而实现动态路由功能。

将 Route 的 uri 地址修改为以下形式。

lb://service-name

以上配置说明如下:

  • lb:uri 的协议,表示开启 Spring Cloud Gateway 的负载均衡功能。
  • service-name:服务名,Spring Cloud Gateway 会根据它获取到具体的微服务地址。

Filter 过滤器

image.png

按照作用范围划分,Spring Cloud gateway 的 Filter 可以分为 2 类:

  • GatewayFilter:应用在单个路由或者一组路由上的过滤器。
  • GlobalFilter:应用在所有的路由上的过滤器。

GatewayFilter 是 Spring Cloud Gateway 网关中提供的一种应用在单个或一组路由上的过滤器。它可以对单个路由或者一组路由上传入的请求和传出响应进行拦截,并实现一些与业务无关的功能,比如登陆状态校验、签名校验、权限校验、日志输出、流量监控等。

image.png

GlobalFilter 是一种作用于所有的路由上的全局过滤器,通过它,我们可以实现一些统一化的业务功能