其他分享
首页 > 其他分享> > SpringCloudGateway 网关

SpringCloudGateway 网关

作者:互联网

本文是对这段时间学习的整理归纳,方便后续翻阅回忆,每个点对应的实践工程代码已上传 GitHub


SpringCloudGateway

SpringCloudGateway 是 SpringCloud 的第二代网关,基于 Netty、Reactor、WebFlux构建,将会取代第一代的网关 Zuul(性能相比提升了1.6倍)

注意:SpringCloudGateway 无法在 servlet 容器(如 tomcat)下工作,也无法打成 war 包,且只支持 SpringBoot 2.0+。

核心概念

  1. Route(路由):转发规则,包含ID、目标URL、Predicate集合以及Filter集合。
  2. Predicate(断言):匹配路由的条件,实现方式是 java.util.function.Predicate 的函数接口。
  3. Filter(过滤器):对请求和响应的自定义修改。

工作原理

  1. 流程图 官网地址

在这里插入图片描述

三种 uri 路由方式

  1. 路由到指定URL
spring:
  cloud:
    gateway:
      routes:
      - id: my_route
        uri: http://www.baidu.com
        predicates:
          - Path=/shares/**
        filters:
          - AddRequestHeader=x-oysq, test1
  1. 路由到 websocket
uri: ws://1.1.1.1:1111
  1. 路由到服务发现组件上的微服务
uri: lb://content-center

两种匹配方式

  1. 通配:访问 http://{gateway_url}/** 会转发到 http://www.baidu.com/**
   uri: http://www.baidu.com
  1. 精确匹配:访问 http://{gateway_url}/abc/123 会转发到 http://www.baidu.com/abc/123
   uri: http://www.baidu.com/abc/123

十种内置的谓词工厂

注意:存在多个断言时,匹配优先级是从上到下,并不是根据匹配程度。

技巧:时间可使用 System.out.println(ZonedDateTime.now()); 打印,然后即可看到时区。例如:2021-09-19T17:21:23.243+08:00[Asia/Shanghai]

谓词
After
Before
Between
Cookie
Header
Host
Method
Path
Query
RemoteAddr

自定义谓词工厂

自定义谓词工厂的类名必须是:谓词+RoutePredicateFactory

例如自定义谓词 Contain, 则类名必须是 ContainRoutePredicateFactory

26种内置过滤器工厂

# 举例:为请求添加 header 头 x-oysq, 值为 test1
filters:
  - AddRequestHeader=x-oysq, test1

自定义过滤器工厂

自定义过滤器工厂的类名必须是:过滤器名+GatewayFilterFactory

例如自定义过滤器 PreLog, 则类名必须是 PreLogGatewayFilterFactory

  1. 过滤器声明周期
  1. 核心 API
  1. 实现方式

注意:两种实现的方式,最后在yml配置文件里面的配置方式是不一样的

局部过滤器的执行顺序

一个Route中可以配置多条局部过滤器,从上到下的执行顺序从1开始递增。

若配置了默认过滤器 default-filters,则先执行默认的1,再执行Route中的1,然后再执行默认的2,以此类推。

自定义过滤器工厂可以通过返回 OrderedGatewayFilter 来改变 Order 顺序

全局过滤器

全局过滤器有9种,并且可以通过 @Order 的方式指定执行顺序,数字越小,优先级越高。

gateway 监控端点

此外还支持动态添加、修改、删除路由,查看全局路由等等

其他

SpringCloudGateway 默认使用 Hystrix 进行容错,也可以改为 Sentinel,但是要 1.6 版本开始的 Sentinel 才支持。此外,还可以集成 redis 进行集群限流(基于令牌桶算法的实现)。

SpringCloudGateway 默认集成了 Ribbon,因此自带了对 lb 微服务的负载均衡。


标签:网关,http,自定义,SpringCloudGateway,谓词,过滤器,gateway,路由
来源: https://blog.csdn.net/qq_31443615/article/details/120103761