webflux mysql mono创建_webflux系列--基础

文章目录

Spring Mvc 和 Spring WebFlux

WebFlux 的优势&提升性能

WebFlux 应用场景

异同点

响应式编程

Reactive Streams

顶级接口

Reactor

Reactor实现

Flux

Mono

Flux常用函数

**调试reactor**

StepVerifier方法

Reactor中的多线程

**Schedulers**

Schedulers.immediate()

Schedulers.single()

Schedulers.elastic()

Schedulers.parallel()

错误处理

**onErrorReturn**

**onErrorResume**

**onErrorMap**

**doOnError** **记录错误日志**

**finally 确保做一些事情**

**retry 重试机制**

背压(流量控制)

Spring Mvc 和 Spring WebFlux

​ Spring MVC 构建于 Servlet API 之上,使用的是同步阻塞式 I/O 模型,每一个请求对应一个线程去处理。

​ Spring WebFlux 是一个异步非阻塞式的 Web 框架,它能够充分利用多核 CPU 的硬件资源去处理大量的并发请求。

WebFlux 的优势&提升性能

​ WebFlux 内部使用的是响应式编程(Reactive Programming),以 Reactor 库为基础, 基于异步和事件驱动,可以让我们在不扩充硬件资源的前提下,提升系统的吞吐量和伸缩性。

​ WebFlux 并不能使接口的响应时间缩短,它仅仅能够提升吞吐量和伸缩性。

WebFlux 应用场景

​ Spring WebFlux 是一个异步非阻塞式的 Web 框架,所以,它特别适合应用在 IO 密集型的服务中,比如微服务网关这样的应用中。

备注:

​ IO 密集型包括:磁盘IO密集型, 网络IO密集型,微服务网关就属于网络 IO 密集型,使用异步非阻塞式编程模型,能够显著地提升网关对下游服务转发的吞吐量。

异同点

9080e2a48fbd8c8e76b47eddb112dd07.png

相同点:

都可以使用 Spring MVC 注解,如 @Controller, 方便我们在两个 Web 框架中自由转换;

均可以使用 Tomcat, Jetty, Undertow Servlet 容器(Servlet 3.1+);

注意点:

Spring MVC 因为是使用的同步阻塞式,更方便开发人员编写功能代码,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebFlux是Spring框架的一部分,它提供了一种响应式编程的方式来构建基于非阻塞I/O的应用程序。在WebFlux中,我们可以使用两种主要的数据类型:Mono和Flux。 1. MonoMono是一种包含零个或一个元素的响应式流。它类似于Java 8中的Optional,但具有更多的操作符和功能。下面是一些使用Mono的示例: ```java Mono<String> mono = Mono.just("Hello"); // 创建一个包含单个元素的Mono mono.subscribe(System.out::println); // 订阅并打印元素 Mono<Integer> emptyMono = Mono.empty(); // 创建一个空的Mono emptyMono.subscribe(System.out::println); // 不会输出任何内容 Mono<String> errorMono = Mono.error(new RuntimeException("Error")); // 创建一个包含错误的Mono errorMono.subscribe(System.out::println, Throwable::printStackTrace); // 打印错误信息 ``` 2. Flux: Flux是一种包含零个或多个元素的响应式流。它类似于Java 8中的Stream,但具有更多的操作符和功能。下面是一些使用Flux的示例: ```java Flux<String> flux = Flux.just("Hello", "World"); // 创建一个包含多个元素的Flux flux.subscribe(System.out::println); // 订阅并打印元素 Flux<Integer> emptyFlux = Flux.empty(); // 创建一个空的Flux emptyFlux.subscribe(System.out::println); // 不会输出任何内容 Flux<String> errorFlux = Flux.error(new RuntimeException("Error")); // 创建一个包含错误的Flux errorFlux.subscribe(System.out::println, Throwable::printStackTrace); // 打印错误信息 ``` 通过使用Mono和Flux,我们可以在WebFlux中处理异步和非阻塞的操作,例如处理HTTP请求和响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值