当前位置: 首页 > news >正文

微服务网关:Spring Cloud Zuul 升级 Spring Cloud Gateway 的核心要点

1. 服务路由

1.1. Zuul 接收请求:

  1. 在routes路由规则中,根据path去匹配,如果匹配中,就使用对应的路由规则进行请求转发
  2. 如果无法从routes中匹配,则根据path用“/”去截取第一段作为服务名进行请求转发,转发时,默认将第一段截取调
  3. 如果截取的服务名不在注册中心中存在服务,则报错404

1.2. Gateway 接收请求:

  1. 在routes路由规则中,根据断言(predicates)来匹配路由规则,最常用的是Path;在 zuul 中,会提供默认的 url 截取,在 Gateway 这里,需要我们主动使用 StripPrefix 过滤器来完成
  2. 如果从routes路由中,经过断言也无法匹配,则直接返回404

所以这里需要注意,如果在zuul网关有服务使用了路由转发但是没有配置,在gateway这里一定要手动配置上。

2. 过滤器

在使用 Zuul 网关中,常使用 javax.servlet.Filtercom.netflix.zuul.ZuulFilter来完成过滤器的作用。

如果改造为 Spring cloud Gateway,可使用 org.springframework.web.server.WebFilterorg.springframework.cloud.gateway.filter.GlobalFilter来完成替换。

其中 WebFilter 对应 Filter,是对路由转发+web接口调用进行过滤;而网关组件提供的过滤器,如 ZuulFilter 和 GlobaFilter,只针对路由转发进行过滤。

业务逻辑全链路异步非阻塞:
在 Spring cloud Gateway 中使用 WebFilter 和 GlobaFilter 进行过滤,所有业务逻辑和方法调用,都不能是同步阻塞的,一定得保证整个调用链路都是异步非阻塞的,否则执行会报错,因为高版本 WebFlux 中,会检测链路是否为异步非阻塞。

3. 异步非阻塞的中间件

3.1. 服务调用

因为在 Zuul 网关中,微服务的调用一般使用 Spring Cloud Openfeign 完成的,而这个组件底层是使用 HttpClient、OkHttp等 HTTP 组件来完成接口调用,是同步阻塞的;因此,我们需要改造为异步非阻塞,这里我们将使用 Webflux 提供的 WebClient 来完成。将每个微服务的 Openfeign 调用重新封装为对应的 WebClient 客户端,用于支撑异步非阻塞的 HTTP 接口调用。

3.2. 数据库

Zuul 网关,主要使用的数据库中间件有:MySQL、MongoDB 和 Redis。

3.2.1. 异步非阻塞MySQL

MySQL 我们可以使用 Spring Boot 提供的 spring-boot-starter-data-r2dbc

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>

调用 MySQL 使用上述组件提供的ReactiveCrudRepository即可。

3.2.2. 异步非阻塞MongoDB

MondoDB 我们可以使用 Spring Boot 提供的 spring-boot-starter-data-mongodb-reactive

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>

调用 MongoDB 使用上述组件提供的ReactiveMongoTemplateMongoClient即可

3.2.3. 异步非阻塞Redis

Redis 我们可以使用 Spring Boot 提供的 spring-boot-starter-data-redis-reactive

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>

调用 Redis 使用上述组件提供的ReactiveRedisTemplate即可。

http://www.lryc.cn/news/182359.html

相关文章:

  • 视频讲解|含可再生能源的热电联供型微网经济运行优化(含确定性和源荷随机两部分代码)
  • 3种等待方式,让你学会Selenium设置自动化等待测试脚本!
  • [Spring] Spring5——AOP 简介
  • C/C++ 动态规划面试算法题
  • kafka伪集群部署,使用zookeeper模式
  • Postgresql 主从复制+主从切换(流复制)
  • java获取字符串集合中每个字符并且组成一个新的集合实现
  • 结构型设计模式——外观模式
  • 【算法学习】-【双指针】-【快乐数】
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-6】处理输入-链式 Prompt Chaining Prompts
  • 从零手搓一个【消息队列】创建核心类, 数据库设计与实现
  • 14:00面试,14:06就出来了,这问的过于变态了。。。
  • url请求头信息
  • 【Oracle】Oracle系列之十六--数据库备份
  • uni-app:实现页面效果3
  • 计算机网络基础(一):网络系统概述、OSI七层模型、TCP/IP协议及数据传输
  • 互联网金融理财知识点简单总结
  • 微信小程序template界面模板导入
  • C/C++跨平台构建工具CMake-----在C++源码中读取CMakeLists.txt配置文件中的内容
  • 【MVP争夺战】python实现-附ChatGPT解析
  • 6 个最佳免费 Android 数据恢复软件
  • 数学建模Matlab之数据预处理方法
  • 如何保证Redis的HA高可用
  • 第一百六十三回 如何在任意位置显示PopupMenu
  • 采用python中的opencv2的库来运用机器视觉移动物体
  • 一、thymeleaf简介
  • 二分查找模版
  • idea清空缓存类
  • PAT(Basic Level) Practice(中文) 1015德才论
  • 接口自动化测试的概述及流程梳理~