Spring Cloud_GateWay

作者: Cathy 分类: 编程开发 发布时间: 2023-07-16 04:27

什么是 Spring Cloud Gateway?

  • Spring Cloud Gateway 属于 Spring Cloud 生态系统中的网关,其诞生的目标是为了替代老牌网关 Zuul
  • 为了提升网关的性能,Spring Cloud Gateway 基于 Spring WebFlux 。Spring WebFlux 使用 Reactor 库来实现响应式编程模型,底层基于 Netty 实现同步非阻塞的 I/O
  • Spring Cloud Gateway 不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,限流
  • Spring Cloud Gateway 和 Zuul 2.x 的差别不大,也是通过过滤器来处理请求。不过,目前更加推荐使用 Spring Cloud Gateway 而非 Zuul,Spring Cloud 生态对其支持更加友好

Spring Cloud Gateway 的工作流程?

![[Pasted image 20230913094237.png]]

  • 路由判断:客户端的请求到达网关后,先经过 Gateway Handler Mapping 处理,这里面会做断言判断,看下符合哪个路由规则,这个路由映射后端的某个服务
  • 请求过滤:然后请求到达 Gateway Web Handler,这里面有很多过滤器,组成过滤器链,这些过滤器可以对请求进行拦截和修改,比如添加请求头、参数校验等等。然后将请求转发到实际的后端服务
  • 服务处理:后端服务处理请求
  • 响应过滤:后端处理完后,响应结果,返回给 Gateway 的过滤器做处理
  • 响应返回:响应经过过滤处理后,返回给客户端

Spring Cloud Gateway 的断言是什么?

  • 断言就是对表达式做 if 判断
  • 在 Gateway 中,如果客户端发送的请求满足了断言的条件,则映射到指定的路由器,就能转发到指定的服务上进行处理

Spring Cloud Gateway 的路由和断言是什么关系?

  • 一对多:一个路由规则可以包含多个断言
  • 同时满足:如果一个路由规则中有多个断言,则需要同时满足才能匹配
  • 第一个匹配成功:如果一个请求可以匹配多个路由,则映射第一个匹配成功的路由

Spring Cloud Gateway 如何实现动态路由?

  • 实现动态路由的方式有很多种,推荐基于 Nacos 的注册中心来实现
  • Spring Cloud Gateway 可以从注册中心获取服务的元数据(例如服务名称、路径等),然后根据这些信息自动生成路由规则

Spring Cloud Gateway 的过滤器有哪些?

Filter 按照请求和响应可以分为两种:

  • Pre 类型:在请求被转发到微服务之前,对请求进行拦截和修改
    • 例如参数校验、权限校验、流量监控、日志输出
  • Post 类型:微服务处理完请求后,返回响应给网关,网关可以再次进行处理
    • 例如修改响应内容或响应头、日志输出、流量监控等

Filter 按照作用范围划分:

  • 局部过滤器:应用在单个路由或一组路由上的过滤器
    • AddRequestHeader 为原始请求添加 Header
    • AddResponseHeader 为原始响应添加 Header
  • 全局过滤器:应用在所有路由上的过滤器,常见用法是进行负载均衡
    • LoadBalancerClient Filter 整合 Ribbon 实现负载均衡

Spring Cloud Gateway 支持限流吗?

  • 支持,Spring Cloud Gateway 自带限流器,基于 Reids + Lua 实现
  • 通常结合 Sentinel 实现网关流量控制

Spring Cloud Gateway 如何自定义全局异常处理?

  • 在 SpringBoot 项目中,捕获全局异常只需要在项目中配置 @RestControllerAdvice@ExceptionHandler 就可以,不过,这种方式在 Spring Cloud Gateway 下不适用
  • Spring Cloud Gateway 提供了多种全局处理的方式,比较常用的一种是实现 ErrorWebExceptionHandler 并重写其中的 handle 方法

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注