Spring Cloud 2023 新特性支持同步网关

 更新时间:2023年10月12日 10:53:12   作者:冷冷  
这篇文章主要为大家介绍了Spring Cloud 2023 新特性支持同步网关讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

网关不支持传统 Servlet 容器

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

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

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
<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

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

以上就是Spring Cloud 2023 新特性支持同步网关的详细内容,更多关于Spring Cloud同步网关的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot的10个参数验证技巧分享

    SpringBoot的10个参数验证技巧分享

    参数验证很重要,是平时开发环节中不可少的一部分,但是我想很多后端同事会偷懒,干脆不错,这样很可能给系统的稳定性和安全性带来严重的危害,那么在Spring Boot应用中如何做好参数校验工作呢,本文提供了10个小技巧,需要的朋友可以参考下
    2023-09-09
  • Java SpringBoot在RequestBody中高效的使用枚举参数原理案例详解

    Java SpringBoot在RequestBody中高效的使用枚举参数原理案例详解

    这篇文章主要介绍了Java SpringBoot在RequestBody中高效的使用枚举参数原理案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Java分治法与二分搜索算法实例分析

    Java分治法与二分搜索算法实例分析

    这篇文章主要介绍了Java分治法与二分搜索算法,简单讲述了分治法与二分搜索算法的原理并结合java实例分析了二分搜索算法的实现与使用技巧,需要的朋友可以参考下
    2017-11-11
  • Java Timer与TimerTask类使程序计时执行

    Java Timer与TimerTask类使程序计时执行

    这篇文章主要介绍了Java定时器中的Timer和TimerTask的原理。Timer主要用于Java线程里指定时间或周期运行任务,它是线程安全的,但不提供实时性(real-time)保证。接下来就跟随小编一起深入了解Timer和TimerTask吧
    2022-02-02
  • idea 设置鼠标悬停(放上)弹出注释的方法

    idea 设置鼠标悬停(放上)弹出注释的方法

    这篇文章主要介绍了idea 设置鼠标悬停(放上)弹出注释的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • java中实体类实现时间日期自动转换方式

    java中实体类实现时间日期自动转换方式

    这篇文章主要介绍了java中实体类实现时间日期自动转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 图文详解Maven工程打jar包的N种方式

    图文详解Maven工程打jar包的N种方式

    最近在打包maven项目时,该项目中仅有一个测试类,想打成jar包运行测试,所以下面这篇文章主要给大家介绍了关于Maven工程打jar包的N种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • mybatis 使用concat 模糊查询方式

    mybatis 使用concat 模糊查询方式

    这篇文章主要介绍了mybatis 使用concat 模糊查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 关于java中基本数据类型的数值范围

    关于java中基本数据类型的数值范围

    这篇文章主要介绍了关于java中基本数据类型的数值范围,基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型,它们是我们编程中使用最频繁的类型,需要的朋友可以参考下
    2023-07-07
  • Java获取当前时间的时间戳(13位和10位)

    Java获取当前时间的时间戳(13位和10位)

    本文主要介绍了Java获取当前时间的时间戳(13位和10位),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论