响应式编程
作为响应式编程方向上的第一步,微软在.NET生态系统中创建了Rx库(Reactive Extensions)。RxJava是在JVM上对它的实现。
响应式编程是一个异步编程范式,通常出现在面向对象的语言中,作为观察者模式的一个扩展。
它关注数据的流动、变化的传播。这意味着可以轻易地使用编程语言表示静态(如数组)或动态(如事件发射源)数据流。
响应式流
随着时间的推移,一个专门为Java的标准化出现了。它是一个规范,定义了一些接口和交互规则,用于JVM平台上的响应式库。
它就是响应式流(Reactive Streams),它的这些接口已经被集成到Java 9里,在java.util.concurrent.Flow这个父类里。
响应式流和迭代器较相似,不过迭代器是基于“拉”(pull)的,而响应式流是基于“推”(push)的。
迭代器的使用其实是命令式编程,因为由开发者决定什么时候调用next()获取下一个元素。
在响应式流中,与上面等价的是发布者-订阅者。但当有新的可用元素时,是由发布者推给订阅者的。这个“推”就是响应式的关键所在。
另外,对被推过来元素的操作也是以声明的方式进行的,程序员只需表达做什么就行了,不需要管怎么做。
发布者使用onNext方法向订阅者推送新元素,使用onError方法告知一个错误,使用onComplete方法告知已经结束。
可见,错误处理和完成(结束)也是以一个良好的方式被处理。错误和结束都可以终止序列。
这种方式非常灵活。这种模式支持0个(没有)元素/1个元素/n(多)个元素(包括无限序列,如果滴答的钟表)这些情况。
Reactor粉墨登场
Reactor是第四代响应式库,是一个响应式编程范式的实现,用于在JVM平台上基于响应式流规范构建非阻塞异步应用。
它极大地实现了JVM上响应式流的规范(http://www.reactive-streams.org/)。
它是一个完全非阻塞响应式编程的基石,带有高效需求管理(以管理“后压”的形式)。
它直接集成Java函数式API,特别是CompletableFuture,Stream和Duration。
它支持使用reactor-netty工程实现非阻塞跨进程通信,适合微服务架构,支持HTTP(包括Websockets),TCP和UDP。
注&#x