Spring Cloud 2023 新特性:同步网关

网关不支持传统 Servlet 容器

Spring Cloud Gateway 需要运行在提供的 Netty 运行时。它不能在传统的 Servlet 容器中工作,也不能在构建为 WAR 时工作。WebFlux 使用了异步非阻塞的编程模型,相较于传统的 MVC Servlet 需要理解和适应新的编程范式和响应式编程概念,因此学习曲线可能较陡峭。

如果在 spring-cloud-gateway 引入了 tomcat 等传统容器会抛出如下异常:

less 复制代码
 14 Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
 15     at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:124) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
 16     at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:86) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
 17     at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:414) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
 18     at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:178) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
 19     at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:179) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
 20     at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:152) ~[spring-boot-2.1.6.RELEASE.jar:2.1.6.RELEASE]
 21     ... 8 common frames omitted

MVC Servlet 支持

在 SpringCloud 2023 版本(Spring Cloud Gateway 4.1)版本,官方提供了对 MVC Servlet 的支持,可以使用 tomcat 等容器替代 netty ,使用同步的 Servlet Filter 代替复杂的事件流的异步编程风格。

快速开始

  • springboot 3.2

  • spring clouod 2023

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway-mvc</artifactId>
</dependency>

配置转发规则

所有客户端请求 127.0.0.1:8080 转发至 pig4cloud.com

yaml 复制代码
spring:
  cloud:
    gateway:
      mvc:
        routes:
          - id: pig
            uri: https://pig4cloud.com
            predicates:
              - Path=/

注意:如果使用 gateway-mvc ,如有配置规则需要增加 mvc 这个层级的配置不然无效

如何自定义网关 filter

打开 Spring Cloud Gateway 的官网,发现针对 MVC 支持的部分没有提供过多的参考资料。不过按笔者看来完全不需要参考其他资料,只要按照 Spring MVC 项目中如何编写 Filter 的方法,就可以实现 Gateway 的开发。

注意指定自定义 Filter 的顺序,Spring Cloud Gateway Filter 执行顺序与 WebFlux Filter 保持一致。

总结

Spring Cloud Gateway 对于同步 MVC 的支持,早在社区中就已提出(毕竟最早使用的都是 Zuul 1.x 切换过去,原本就是 MVC 的实现)。随着 Java 21 正式发布,虚拟线程的出现无形中对同步 MVC 提供了性能加持。官方在适配 Java 21 后,会正式发布相关的版本,Spring Cloud Gateway 的 MVC 版本将简化原有的网关逻辑开发难度,极大地丰富了网关应用。

PIG 微服务已支持 SpringBoot3.2 、SpringCloud 2023

源码下载: gitee.com/log4j/pig.g... -b 2023

相关推荐
vx_Biye_Design6 分钟前
springboot角色扮演服务平台65161-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
vx_Biye_Design18 分钟前
springboot咖啡厅顾客点单管理系统12080-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express
QQ_216962909621 分钟前
基于微信小程序的智能膳食分析系统
java·大数据·spring boot·微信小程序·小程序·旅游
专业程序开发源29 分钟前
flask动漫推荐系统32319-计算机课程设计、毕业设计
java·spring boot·后端·django·flask·php·课程设计
FYKJ_201036 分钟前
springboot手工蜀绣在线销售系统60947-计算机课程设计、毕业设计
java·spring boot·后端·python·mysql·spark·课程设计
vx_Biye_Design38 分钟前
springboot老年人用药智能管理系统38605-计算机课程设计、毕业设计
java·spring boot·后端·python·django·课程设计·express
QQ_216962909642 分钟前
基于C#(Asp.net)电竞陪玩信息管理系统的设计与实现
java·大数据·spring boot·微信小程序·c#·云计算·asp.net
vx_Biye_Design44 分钟前
springbootNBA数据分析系统平台42434-计算机课程设计、毕业设计
java·vue.js·spring boot·python·django·课程设计·express
Q264336502344 分钟前
【有源码】基于springboot的知识产权管理系统-知识产权咨询问答管理系统-知识产权价值评估管理系统
java·spring boot·mysql·spring·毕业设计·javaweb·课程设计
code_slave(码畜)13 小时前
微服务架构落地:基础服务 —— 报表服务(中篇:元数据、查询引擎、缓存与权限落地)
spring boot·spring cloud·缓存·微服务·架构