Reactive Programming入门概念详解

 更新时间:2022年09月28日 16:24:58   作者:暗里着迷for_you  
这篇文章主要为大家介绍了Reactive Programming入门概念详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

为了应对高并发环境下的服务端编程,xx提出了一个实现异步编程的方案 -Reactive Programming,中文名称反应式编程。反应式编程(reactive programming)并不是一个新的概念,也不是一个新的技术,很早之前就被提出来了。

先从几个概念入门说起:

  • Reactive Programming
  • Reactive Streams
  • Reactor
  • Webflux

Reactive Programming

反应式编程 (reactive programming) 是一种基于数据流 (data stream) 和 变化传递 (propagation of change) 的声明式 (declarative) 的编程范式。

响应式编程使用三个核心概念:数据流,变化传递和异步观察。

换句话说:使用异步数据流进行编程,这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。反应式编程提高了代码的抽象级别,可以只关注定义了业务逻辑的那些相互依赖的事件。

Reactive Streams

Reactive Streams :The purpose of Reactive Streams is to provide a standard for asynchronous stream processing with non-blocking backpressure。

Reactive Streams 的目的是为具有非阻塞背压的异步流处理提供标准。

对于Java程序员,Reactive Streams是一个API。Reactive Streams为我们提供了Java中的Reactive Programming的通用API。

Reactive Streams API的范围是找到一组最小的接口,方法和协议,这些接口,方法和协议将描述必要的操作和实体,从而实现具有非阻塞背压的异步数据流。

Reactive Streams API中如下四个接口:(后面文章详细)

  • Publisher 发布者(生产者)
public interface Publisher<T> {    
    public void subscribe(Subscriber<? super T> s);
}
  • Subscriber订阅者(消费者)
public interface Subscriber<T> {    
    public void onSubscribe(Subscription s);    
    public void onNext(T t);    
    public void onError(Throwable t);    
    public void onComplete();
}
  • Subscription 订阅
public interface Subscription {   
    public void request(long n);    
    public void cancel();
}
  • Processor 处理者
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}

Spring Reactor

Reactor 是第四代响应式库,基于Reactive Streams规范,用于在 JVM 上构建非阻塞应用程序。是Spring提供的非阻塞式响应式编程框架,实现了Reactive Streams规范而已

  • reactor-core: Reactor 完全无阻塞,并提供高效的管理,它直接与Java的函数式API,CompletableFuture,Stream配合使用
    • [0|1| N]序列:Reactore提供了两个响应式和可组合的API,Flux 和 Mono。

Flux 表示的是包含 0 到 N 个元素的异步序列。在该序列中可以包含三种不同类型的消息通知:正常的包含元素的消息、序列结束的消息和序列出错的消息。当消息通知产生时,订阅者中对应的方法 onNext(), onComplete()和 onError()会被调用。Mono 表示的是包含 0 或者 1 个元素的异步序列。该序列中同样可以包含与 Flux 相同的三种类型的消息通知。Flux 和 Mono 之间可以进行转换。对一个 Flux 序列进行计数操作,得到的结果是一个 Mono对象。把两个 Mono 序列合并在一起,得到的是一个 Flux 对象。

  • Non-Blocking IO: Reactor 为HTTP(包括websocket),TCP和UDP提供背压就绪的网络引擎。
  • webflux

Spring 产品组合提供了两个并行堆栈。 一种是基于带有 Spring MVC 和 Spring Data 结构的 Servlet API。 另一个是完全反应式堆栈,它利用了 Spring WebFlux 和 Spring Data 的反应式存储库。 如下技术栈:Spring官方提供

数据库:以一种反应的方式访问和处理数据是非常重要的。MongoDB、Redis和Cassandra都有原生的Spring数据响应支持。许多关系数据库(Postgres、Microsoft SQL Server、MySQL、H2和GoogleSpanner)通过R2DBC提供了反应性支持。

在消息传递的世界中,Spring Cloud Stream还支持对RabbitMQ和Kafka等平台的反应性访问。

Reactive Streams、Reactor和WebFlux 区别?

上面介绍了反应式编程的一些概念。三者的关系:

  • Reactive Streams 是一套反应式编程标准和规范;
  • Reactor 是基于 Reactive Streams 一套反应式编程框架;
  • WebFlux 以 Reactor 为基础,实现 Web 领域的反应式编程框架。

参考:

以上就是Reactive Programming入门概念详解的详细内容,更多关于Reactive Programming入门的资料请关注脚本之家其它相关文章!

相关文章

  • Java 在PDF中添加条形码的两种方法

    Java 在PDF中添加条形码的两种方法

    本文就将通过使用Java程序来演示如何在PDF文档中添加Codebar、Code128A和Code39条形码。通过实例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-03-03
  • 十个最常见的Java字符串问题(翻译)

    十个最常见的Java字符串问题(翻译)

    这篇文章主要介绍了十个最常见的Java字符串问题(翻译),需要的朋友可以参考下
    2015-03-03
  • idea2019版与maven3.6.2版本不兼容的解决方法

    idea2019版与maven3.6.2版本不兼容的解决方法

    这篇文章主要介绍了idea2019版与maven3.6.2版本不兼容的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • SpringBoot整合EasyCaptcha实现图形验证码功能

    SpringBoot整合EasyCaptcha实现图形验证码功能

    这篇文章主要介绍了SpringBoot整合EasyCaptcha实现图形验证码功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-02-02
  • Java如何实现图片裁剪预览功能

    Java如何实现图片裁剪预览功能

    通常注册账户上传用户图像时需要进行预览,这篇文章就是教我们如何用 Java 实现图片裁剪预览功能,需要的朋友可以参考下
    2015-07-07
  • Mac下用Java调用c/c++的思路详解

    Mac下用Java调用c/c++的思路详解

    这篇文章主要介绍了Mac下用Java调用c/c++的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 解决idea出现的java.lang.OutOfMemoryError: Java heap space的问题

    解决idea出现的java.lang.OutOfMemoryError: Java heap space的问题

    我们在使用idea的时候经常会遇到一些问题,本文介绍了如何解决idea出现的java.lang.OutOfMemoryError: Java heap space的问题,文中有相关的图文示例,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java8内存模型PermGen Metaspace实例解析

    Java8内存模型PermGen Metaspace实例解析

    这篇文章主要介绍了Java8内存模型PermGen Metaspace实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Spring 代码技巧梳理总结让你爱不释手

    Spring 代码技巧梳理总结让你爱不释手

    这篇文章主要分享了Spring 代码技巧梳理总结,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Spring框架中ImportBeanDefinitionRegistrar的应用详解

    Spring框架中ImportBeanDefinitionRegistrar的应用详解

    这篇文章主要介绍了Spring框架中ImportBeanDefinitionRegistrar的应用详解,如果实现了ImportSelector接口,在配置类中被@Import加入到Spring容器中以后,Spring容器就会把ImportSelector接口方法返回的字符串数组中的类new出来对象然后放到工厂中去,需要的朋友可以参考下
    2024-01-01

最新评论