2021年SpringCloudGateway基操讲解

本文介绍了选择Spring Cloud Gateway作为内部网关的原因,并逐步创建了一个简单的API网关,阐述了其工作流程,尤其是异步环境下请求处理的核心——Spring Boot与Spring WebFlux的WebHandler。通过分析HttpWebHandlerAdapter如何将请求封装成ServerWebExchange,为后续深入理解Spring Cloud Gateway的源码和功能打下基础。
摘要由CSDN通过智能技术生成

本系列代码地址:github.com/JoJoTec/spr…

前言

接下来,将进入我们升级之路的又一大模块,即网关模块。网关模块我们废弃了已经进入维护状态的 zuul,选用了 Spring Cloud Gateway 作为内部网关。为何选择 Spring Cloud Gateway 而不是 nginx 还有 Kong 的原因是:

  1. 项目组对于 Java 更加熟悉,并且对于 Project Reactor 异步编程也比较熟悉,这个比较重要
  2. 需要在网关中使用我们之前实现的基于请求的有状态重试的压力敏感的负载均衡器
  3. 需要在网关中实现重试
  4. 需要在网关中实现实例路径断路
  5. 需要在网关中进行业务统一加解密
  6. 需要在网关中实现 BFF(Backends For Frontends)接口,即根据客户端请求,将某几个不同接口的请求一次性组合返回
  7. 需要在网关中使用 Redis 记录一些与 Token 相关的值

因此,我们使用了 Spring Cloud Gateway 作为内部网关,接下来,我们就来依次实现上面说的这些功能。同时在本次升级使用过程中, Spring Cloud Gateway 也有一些坑,例如:

  1. 结合使用 spring-cloud-sleuth 会有链路信息追踪,但是某些情况链路信息会丢失
  2. 对于三方 Reactor 封装的异步 API (例如前面提到的操作 Redis 使用的 spring-data-redis)理解不到位导致关键线程被占用

但是首先,我们需要简单理解下 Spring Cloud Gateway 究竟包括哪些组件以及整个调用流程是什么样子的。由于 Spring Cloud Gateway 基于 Spring-Boot 和 Spring-Webflux 实现,所以我们会从外层 WebFilter 开始说明,然后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值