广告
返回顶部
首页 > 资讯 > 精选 >如何在Spring Boot中使用Webflux
  • 905
分享到

如何在Spring Boot中使用Webflux

2023-06-02 19:06:47 905人浏览 独家记忆
摘要

这篇文章主要介绍“如何在Spring Boot中使用WEBflux”,在日常操作中,相信很多人在如何在spring Boot中使用Webflux问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在Spring

这篇文章主要介绍“如何在Spring Boot中使用WEBflux”,在日常操作中,相信很多人在如何在spring Boot中使用Webflux问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在Spring Boot中使用Webflux”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

为了方便大家理解,我们先来了解几个概念。

响应式编程

在计算机中,响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。

例如,在命令式编程环境中,a=b+c 表示将表达式的结果赋给 a,而之后改变 b 或 c 的值不会影响 a 。但在响应式编程中,a 的值会随着 b 或 c 的更新而更新。

响应式编程是基于异步和事件驱动的非阻塞程序,只需要在程序内启动少量线程扩展,而不是水平通过集群扩展。

用大白话讲,我们以前编写的大部分都是阻塞类的程序,当一个请求过来时任务会被阻塞,直到这个任务完成后再返回给前端;响应式编程接到请求后只是提交了一个请求给后端,后端会再安排另外的线程去执行任务,当任务执行完成后再异步通知到前端。

Reactor

Java 领域的响应式编程库中,最有名的算是 Reactor 了。Reactor 也是 Spring 5 中反应式编程的基础,Webflux 依赖 Reactor 而构建。

Reactor 是一个基于 JVM 之上的异步应用基础库。为 Java 、Groovy 和其他 JVM 语言提供了构建基于事件和数据驱动应用的抽象库。Reactor 性能相当高,在最新的硬件平台上,使用无堵塞分发器每秒钟可处理 1500 万事件。

简单说,Reactor 是一个轻量级 JVM 基础库,帮助你的服务或应用高效,异步地传递消息。Reactor 中有两个非常重要的概念 Flux 和 Mono 。

Flux 和 Mono

Flux 和 Mono 是 Reactor 中的两个基本概念。Flux 表示的是包含 0 到 N 个元素的异步序列。在该序列中可以包含三种不同类型的消息通知:正常的包含元素的消息、序列结束的消息和序列出错的消息。当消息通知产生时,订阅者中对应的方法 onNext(), onComplete()和 onError()会被调用。

Mono 表示的是包含 0 或者 1 个元素的异步序列。该序列中同样可以包含与 Flux 相同的三种类型的消息通知。Flux 和 Mono 之间可以进行转换。对一个 Flux 序列进行计数操作,得到的结果是一个 Mono

WebFlux 是什么?

WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。Spring webflux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现非常好。

非阻塞的关键预期好处是能够以小的固定数量的线程和较少的内存进行扩展。在服务器端 WebFlux 支持2种不同的编程模型:

  • 基于注解的 @Controller 和其他注解也支持 Spring mvc

  • Functional 、Java 8 lambda 风格的路由和处理

如图所示,WebFlux 模块从上到下依次是 Router Functions、WebFlux、Reactive Streams 三个新组件。

  • Router Functions
    对标准的 @Controller,@RequestMapping 等的 Spring MVC 注解,提供一套 函数式风格的 api,用于创建 Router、Handler 和Filter。

  • WebFlux
    核心组件,协调上下游各个组件提供 响应式编程 支持。

  • Reactive Streams
    一种支持 背压 (Backpressure) 的 异步数据流处理标准,主流实现有 RxJava 和 Reactor,Spring WebFlux 集成的是 Reactor。

默认情况下,Spring Boot 2 使用 Netty WebFlux,因为 Netty 在异步非阻塞空间中被广泛使用,异步非阻塞连接可以节省更多的资源,提供更高的响应度。通过比较 Servlet 3.1 非阻塞 I / O 没有太多的使用,因为使用它的成本比较高,Spring WebFlux 打开了一条实用的通路。

值得注意的是:支持 reactive 编程的数据库只有 MongoDB, redis, Cassandra, CoucHBase

Spring Webflux

Spring Boot 2.0 包括一个新的 spring-webflux 模块。该模块包含对响应式 Httpwebsocket 客户端的支持,以及对 REST,html 和 WebSocket 交互等程序的支持。一般来说,Spring MVC 用于同步处理,Spring Webflux 用于异步处理。

Spring Boot Webflux 有两种编程模型实现,一种类似 Spring MVC 注解方式,另一种是基于 Reactor 的响应式方式。

快速上手

添加 webflux 依赖

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

通过 IEDA 的依赖关系图我们可以返现spring-boot-starter-webflux依赖于spring-webflux、Reactor 和 Netty 相关依赖包。

创建 Controller

@RestController
public class HelloController {

    @GetMapping("/hello")
    public Mono<String> hello() {
        return Mono.just("Welcome to reactive world ~");
    }
}

通过上面的示例可以发现,开发模式和之前 Spring Mvc 的模式差别不是很大,只是在方法的返回值上有所区别。

  • just() 方法可以指定序列中包含的全部元素。

  • 响应式编程的返回值必须是 Flux 或者 Mono ,两者之间可以相互转换。

测试

@RunWith(SpringRunner.class)
@WebFluxTest(controllers = HelloController.class)
public class HelloTests {
    @Autowired
    WebTestClient client;

    @Test
    public void getHello() {
        client.get().uri("/hello").exchange().expectStatus().isOk();
    }
}

运行测试类,测试用例通过表示服务正常。启动项目后,访问地址:http://localhost:8080/hello,页面返回信息:

Welcome to reactive world ~

证明 Webflux 集成成功。

到此,关于“如何在Spring Boot中使用Webflux”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 如何在Spring Boot中使用Webflux

本文链接: https://www.lsjlt.com/news/230992.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Spring Boot中使用Webflux
    这篇文章主要介绍“如何在Spring Boot中使用Webflux”,在日常操作中,相信很多人在如何在Spring Boot中使用Webflux问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在Spring...
    99+
    2023-06-02
  • r2dbc在Spring webFlux中怎么使用
    这篇文章主要介绍“r2dbc在Spring webFlux中怎么使用”,在日常操作中,相信很多人在r2dbc在Spring webFlux中怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”r2dbc在S...
    99+
    2023-06-29
  • 如何正确的使用Spring WebFlux
    如何正确的使用Spring WebFlux?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Spring-WebFlux框架Spring WebFlux在内部使用Project R...
    99+
    2023-06-14
  • Druid如何在Spring Boot中使用
    这篇文章给大家介绍Druid如何在Spring Boot中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSour...
    99+
    2023-05-31
    springboot druid
  • 如何在Spring Boot中使用MQTT
    目录为什么选择MQTT MQTT, 启动! 使用方式 Client模式 创建工厂类 创建工具类 Spring Integration 总结 为什么选择MQTT MQTT的定义相信很...
    99+
    2022-11-12
  • Lombok如何在Spring Boot中使用
    本篇文章给大家分享的是有关Lombok如何在Spring Boot中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。springboot是什么springboot一种全新的编...
    99+
    2023-06-14
  • JdbcTemplate如何在spring boot中使用
    JdbcTemplate如何在spring boot中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Spring对数据库的操作在jdbc上面做了深层次的封装...
    99+
    2023-05-31
    springboot emp jdbctemplate
  • filter如何在Spring Boot中使用
    今天就跟大家聊聊有关filter如何在Spring Boot中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。过滤器(Filter)的注册方法和 Servlet 一样,有两种方式:...
    99+
    2023-05-31
    spring boot filter
  • 如何在spring boot中使用utf8mb4
    这篇文章给大家介绍如何在spring boot中使用utf8mb4,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。spring: datasource:  driver-class-name...
    99+
    2023-06-06
  • 事务如何在Spring Boot 中使用
    今天就跟大家聊聊有关事务如何在Spring Boot 中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。spring Boot 使用事务非常简单,首先使用注解 @EnableTra...
    99+
    2023-05-31
    springboot 事务
  • 如何在Spring与Spring Boot项目中使用Dubbo
    这篇文章给大家介绍如何在Spring与Spring Boot项目中使用Dubbo,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、在Spring中使用Dubbo1、Maven依赖<dependency>&n...
    99+
    2023-05-30
    spring spring boot dubbo
  • thymeleaf模板如何在spring boot中使用
    这篇文章将为大家详细讲解有关thymeleaf模板如何在spring boot中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言Thymeleaf 是一个跟 Velocity、Free...
    99+
    2023-05-31
    springboot thymeleaf
  • freemarker如何在Spring Boot项目中使用
    今天就跟大家聊聊有关freemarker如何在Spring Boot项目中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。(1) freemarker介绍;FreeMarker是一...
    99+
    2023-05-31
    springboot freemarker
  • Profiles 如何在Spring Boot 中配置与使用
    这期内容当中小编将会给大家带来有关Profiles 如何在Spring Boot 中配置与使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Spring Profiles 提供了一套隔离应用配置的方式,不...
    99+
    2023-05-31
    springboot profiles les
  • 数据缓存如何在Spring Boot中使用
    数据缓存如何在Spring Boot中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在实际开发中,对于要反复读写的数据,最好的处理方式是将之在内存中缓存一份,频繁的数据...
    99+
    2023-05-31
    springboot 数据缓存
  • mongodb如何正确的在Spring boot中使用
    这篇文章给大家介绍mongodb如何正确的在Spring boot中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MongoDB是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的...
    99+
    2023-05-31
    springboot mongodb
  • Redis数据库如何在Spring Boot中使用
    本篇文章为大家展示了Redis数据库如何在Spring Boot中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。redis介绍Redis是目前业界使用最广泛的内存数据存储。相比memcached...
    99+
    2023-05-31
    springboot redis
  • Cli如何在spring Boot中配置并使用
    Cli如何在spring Boot中配置并使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。SpringBootCLI是一个命令行工具,可用于快速搭建基于spring的原型...
    99+
    2023-05-31
    springboot cli
  • 定时任务如何在Spring Boot中使用
    本篇文章给大家分享的是有关定时任务如何在Spring Boot中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Spring Boot中配置定时任务import org.sp...
    99+
    2023-05-31
    springboot 定时任务
  • java中Spring boot如何使用
    这篇文章主要介绍“java中Spring boot如何使用”,在日常操作中,相信很多人在java中Spring boot如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中Spring boot如...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作