1、响应流的特点
先说一下响应流规范,它是响应式编程的基石,他具有以下特点:

响应流必须是无阻塞的。
响应流必须是一个数据流。
它必须可以异步执行。
并且它也应该能够处理背压。

2、Publisher

由于响应流的特点,我们不能再返回一个简单的POJO对象来表示结果了,必须返回一个类似Java中的Future的概念,在有结果可用时通知消费者进行消费响应。Reactive Stream规范中这种被定义为Publisher<T> ,Publisher<T>是一个可以提供0-N个序列元素的提供者,并根据其订阅者Subscriber<? super T>的需求推送元素。一个Publisher<T>可以支持多个订阅者,并可以根据订阅者的逻辑进行推送序列元素。
下面这个Excel计算就能说明一些Publisher<T>的特点。

A1-A9就可以看做Publisher<T>及其提供的元素序列。A10-A13分别是求和函数SUM(A1:A9)、平均函数AVERAGE(A1:A9)、最大值函数MAX(A1:A9)、最小值函数MIN(A1:A9),可以看作订阅者Subscriber。假如说我们没有A10-A13,那么A1-A9就没有实际意义,它们并不产生计算。这也是响应式的一个重要特点:当没有订阅时发布者什么也不做。而Flux和Mono都是Publisher<T>在Reactor 3实现。Publisher<T>提供了subscribe方法,允许消费者在有结果可用时进行消费。如果没有消费者Publisher<T>不会做任何事情,他根据消费情况进行响应。 Publisher<T>可能返回零或者多个,甚至可能是无限的,为了更加清晰表示期待的结果就引入了两个实现模型Mono和Flux。


3、Flux

Flux 是一个发出(emit)0-N个元素组成的异步序列的Publisher<T>,可以被onComplete信号或者onError信号所终止。在响应流规范中存在三种给下游消费者调用的方法 onNext, onComplete, 和onError。下面这张图表示了Flux的抽象模型:


4、Mono

Mono 是一个发出(emit)0-1个元素的Publisher<T>,可以被onComplete信号或者onError信号所终止。
这里就不翻译了,整体和Flux差不多,只不过这里只会发出0-1个元素。也就是说不是有就是没有。象Flux一样,我们来看看Mono的演化过程以帮助理解。

5、总结

Flux和Mono是Java响应式中的重要概念,这其实是规定了两种流式范式,这种范式让数据具有一些新的特性,比如基于发布订阅的事件驱动,异步流、背压等等。另外数据是推送(Push)给消费者的以区别于平时我们的拉(Pull)模式。同时我们可以像Stream Api一样使用类似map、flatmap等操作符(operator)来操作它们。对Flux和Mono这两个概念需要花一些时间去理解它们,不能操之过急。

Java响应式流框架Reactor中的Mono和Flux相关推荐

  1. java reactor框架_Java反应式框架Reactor中的Mono和Flux

    1. 前言 最近写关于响应式编程的东西有点多,很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼.但是目前Java响应式编程中我们对这两个对象的接触又最多,诸如Spring WebF ...

  2. Java反应式框架Reactor中的Mono和Flux,Java程序员必看

    由于响应流的特点,我们不能再返回一个简单的POJO对象来表示结果了.必须返回一个类似Java中的Future的概念,在有结果可用时通知消费者进行消费响应. Reactive Stream规范中这种被定 ...

  3. flux java_Java反应式框架Reactor中的Mono和Flux

    1. 前言 最近写关于响应式编程的东西有点多,很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼.但是目前Java响应式编程中我们对这两个对象的接触又最多,诸如Spring WebF ...

  4. reactor p java_Java反应式框架Reactor中的Mono和Flux

    1. 前言 最近写关于响应式编程的东西有点多,很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼.但是目前Java响应式编程中我们对这两个对象的接触又最多,诸如Spring WebF ...

  5. Java响应式的框架和工具包:RxJava、Spring Reactor 和 Vert.x 概述

    今天,人们想要具有强大用户体验的高响应.交互式应用程序,这通常意味着处理异步性,尤其是当应用程序涉及高负载.实时数据和多用户时. 由于 Java 是一种面向对象的语言,本质上支持命令式编程风格,因此异 ...

  6. Java响应式编程框架

    响应式,直白点理解,就是当数据准备好了,再通知我(函数),有时会觉得与回调很像. 代表框架:Spring Webflux.Vert.x.Quarkus. 有小伙伴不喜欢 Spring,觉得太重.太慢, ...

  7. 关于java的响应式编程框架----SpringReactor

    关于Reactor的介绍 Reactor是Spring中的一个子项目是一个基于java的响应式编程框架,此框架是 Pivotal 公司(开发 Spring 等技术的公司)开发的,实现了 Reactiv ...

  8. JVM上的响应式流 — Reactor简介

    响应式编程 作为响应式编程方向上的第一步,微软在.NET生态系统中创建了Rx库(Reactive Extensions).RxJava是在JVM上对它的实现. 响应式编程是一个异步编程范式,通常出现在 ...

  9. Reactor响应式流的核心机制——背压机制

    响应式流是什么? 响应式流旨在为无阻塞异步流处理提供一个标准.它旨在解决处理元素流的问题--如何将元素流从发布者传递到订阅者,而不需要发布者阻塞,或订阅者有无限制的缓冲区或丢弃. 响应式流模型存在两种 ...

最新文章

  1. js markdown chart flow
  2. java 回滚异常_回滚事务并关闭抛出异常的连接
  3. 通俗讲解分布式锁,看完不懂算我输
  4. 调用c++_WebAssembly: 在C代码中调用JS的函数
  5. [BUUCTF-pwn]——ciscn_2019_s_4
  6. 2016光伏创新如何突围融资困境?
  7. 基于ID3、C4.5算法的决策树相关知识
  8. JavaOne 2012:Lambda之路
  9. Word 中插入 C/C++ 代码(转)
  10. mysql 5.7 group_mysql,_mysql5.7中group by和mysql5.5中group by的结果不一样,mysql - phpStudy...
  11. csdn插件下载和应用
  12. 仿迅雷播放器教程 -- 提取exe资源(12)
  13. 视觉分类任务中,Confusion Matrix (混淆矩阵) 的绘制
  14. 使用subs和evals函数对sympy中的符号进行赋值并且设置数值位数
  15. 英文标题中的字母大写规则
  16. Acegi源码研究(五):七剑下天山
  17. SDN南向接口和北向接口
  18. ubuntu下彻底卸载软件
  19. windows系统安装PhotoshopCS6出现error16问题的解决办法
  20. 【AI名利场·人物】Gowild创始人邱楠:倔强顽强创新着,将AI虚拟生命进行到底...

热门文章

  1. php编写除法器程序,Booth除法器设计
  2. 我的世界手机版怎么增加服务器,我的世界手机版服务器怎么创建
  3. 开发者如何应对新技术暗潮
  4. 机器学习模型1——线性回归和逻辑回归
  5. android 编译器indel,Overview of the HbbTV compliant browser upgrade on Android based DTV platform
  6. 32-CrawlSpider类爬虫与Spider类爬虫比较-【都是基于Scrapy框架】
  7. Java中的Base64详解
  8. 随笔 qsnctf misc三体
  9. ADC0809转换器
  10. Jetpack Compose--声明式UI替代传统命令式UI的新产品