springboot 返回输出流_5分钟理解SpringBoot响应式的核心-Reactor

一、前言

关于 响应式 Reactive,前面的两篇文章谈了不少概念,基本都离不开下面两点:

  • 响应式编程是面向流的、异步化的开发方式
  • 响应式是非常通用的概念,无论在前端领域、还是实时流、离线处理场景中都是适用的。

这次,我们把目光转向 SpringBoot,在SpringBoot 2.0版本之后,提供了对响应式编程的全面支持。因此在升级到 2.x版本之后,便能方便的实现事件驱动模型的后端编程,这其中离不开 webflux这个模块。其同时也被 Spring 5 用作开发响应式 web 应用的核心基础。那么, webflux 是一个怎样的东西?

Webflux

Webflux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。该模块中包含了对 响应式 HTTP、服务器推送 和 WebSocket 的支持。

Webflux 支持两种不同的编程模型:

  • 第一种是 Spring MVC 中使用的基于 Java 注解的方式,一个使用Reactive风格的Controller如下所示:
e0d5f04c7ee3e74180dc8fc5baf86bc5.png
  • 第二种是 基于 Java 8 的 lambda 表达式的函数式编程模型。

这两种编程模型只是在代码编写方式上存在不同,但底层的基础模块仍然是一样的。除此之外,Webflux 可以运行在支持 Servlet 3.1 非阻塞 IO API 的 Servlet 容器上,或是其他异步运行时环境,如 Netty 和 Undertow。

关于Webflux 与 SpringMVC 的区别,可以参考下图:

ad6bdd34256f54457d27294d5b10fa41.png

SpringBoot、Webflux、Reactor 可以说是层层包含的关系,其中,响应式能力的核心仍然是来自 Reactor组件。由此可见,掌握Reactor的用法 必然是熟练进行 Spring 响应式编程的重点。

二、 Mono 与 Flux

在理解响应式Web编程之前,我们需要对Reactor 两个核心概念做一些澄清,一个是Mono,另一个是Flux。

Flux 表示的是包含 0 到 N 个元素的异步序列。在该序列中可以包含三种不同类型的消息通知:

  • 正常的包含元素的消息
  • 序列结束的消息
  • 序列出错的消息

当消息通知产生时,订阅者中对应的方法 onNext(), onComplete()和 onError()会被调用。

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

构造器

Reactor提供了非常方便的API来创建 Flux、Mono 对象,如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值