SpringBoot——webflux解析一

本文详细介绍了Spring Boot 2.0中的WebFlux特性,包括其异步非阻塞IO模型、Reactive Streams规范、Backpressure背压策略、响应式编程以及与Spring MVC的异同点。WebFlux适用于IO密集型服务场景,如微服务网关。文章还探讨了Reactor框架中的Mono和Flux,以及它们在处理数据流中的应用。此外,还讨论了Netty的优点和其selector模型。
摘要由CSDN通过智能技术生成

webflux介绍

Spring Boot 2.0
spring.io 官网有句醒目的话是:

BUILD ANYTHING WITH SPRING BOOT
Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从搭建到开发的过程。应用开箱即用,只要通过一个指令,包括命令行 java -jar 、SpringApplication 应用启动类 、 Spring Boot Maven 插件等,就可以启动应用了。另外,Spring Boot 强调只需要很少的配置文件,所以在开发生产级 Spring 应用中,让开发变得更加高效和简易。目前,Spring Boot 版本是 2.x 版本。Spring Boot 包括 WebFlux。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z0QiBq9N-1647350877518)(//upload-images.jianshu.io/upload_images/13587608-2108800ca0602799.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

传统的以SpringMVC为代表的webmvc技术使用的是同步阻塞式IO模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-we3JkRy0-1647350877522)(//upload-images.jianshu.io/upload_images/13587608-e87cc1031dff253b.png?imageMogr2/auto-orient/strip|imageView2/2/w/891/format/webp)]

而Spring WebFlux是一个异步非阻塞式IO模型,可以用少量的容器线程支撑大量的并发访问,所以Spring WebFlux可以提升吞吐量和伸缩性,但是接口的响应时间并不会缩短,其处理结果还是得由worker线程处理完成之后在返回给请求。想学习交流HashMap,nginx、dubbo、Spring MVC,分布式、高性能高可用、MySQL,redis、jvm、多线程、netty、kafka、的加尉xin(同英):1253431195 扩列获取资料学习,无工作经验不要加哦!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rtkYH6rj-1647350877523)(//upload-images.jianshu.io/upload_images/13587608-0c9ab223c04faeb0.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

webflux应用场景

适合IO密集型、磁盘IO密集、网络IO密集等服务场景,比如微服务网关,就可以使用webflux技术来显著的提升网关对下游服务的吞吐量,spring cloud gateway就使用了webflux这门技术

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3urQyoN-1647350877524)(//upload-images.jianshu.io/upload_images/13587608-371f3ac43c0227b1.png?imageMogr2/auto-orient/strip|imageView2/2/w/861/format/webp)]

Spring Boot 2.0 WebFlux

了解 WebFlux,首先了解下什么是 Reactive Streams。Reactive Streams 是 JVM 中面向流的库标准和规范:

  • 处理可能无限数量的元素
  • 按顺序处理
  • 组件之间异步传递
  • 强制性非阻塞背压(Backpressure)
Backpressure(背压)

背压是一种常用策略,使得发布者拥有无限制的缓冲区存储元素,用于确保发布者发布元素太快时,不会去压制订阅者。

Reactive Streams(响应式流)

一般由以下组成:

  • publisher:发布者,发布元素到订阅者
  • subscriber:订阅者,消费元素
  • subscription:订阅,在发布者中,订阅被创建时,将与订阅者共享
  • processor:处理器,发布者与订阅者之间处理数据,包含了发布者与订阅者的共同体
publisher接口规范
public interface Publisher<T> {
    void subscribe(Subscriber<? super T> var1);
}

subscriber接口规范
public interface Subscriber<T> {
    void onSubscribe(Subscription var1);

    void onNext(T var1);

    void onError(Throwable var1);

    void onComplete();
}

subscription接口规范
public interface Subscription {
    void request(long var1);

    void cancel();
}

processor接口规范
public interface
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值