ReactiveStreams规范及常见库

ReactiveStreams规范及常见库

2023年7月25日发(作者:)

ReactiveStreams规范及常见库⼀、什么是Reactive StreamsReactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking backpressure. This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols.概括的说,Reactive Streams是个规范,它规范了“有⾮阻塞背压机制的异步的流处理”。实际上Reactive Streams规范或者说它的第三⽅代码实现包含的内容更加丰富:除了non-blocking,还有:Composable、Deferred、Flow、Controll、Resilient、Interruptible。其中Composable就是函数式编程思想的⽤武之地。 可体会下Java8⾥的Stream API各种算⼦的参数,所以Lamda表达式是进⾏ReactiveStreams实现的基本前提,否则很难想象臃肿的⾯向对象的Composable。有了JDK8的铺垫,Reactive Streams接⼝被JDK9定义在Flow⾥才是可能的。As of August 23rd, 2019 we have released version 1.0.3 of Reactive Streams for the JVM, including Java API, a textualSpecification, a TCK and implementation examples.这个规范由三部分组成:Java API(ve-streams)、以⽂字描述的规范、技术兼容⼯具包。Reactive Streams 规范 仅限于Java(JavaScript、⽹络协议)世界,其它语⾔虽然也有 Reactive 这样的⼯具(参考这⾥:ReactiveX)实现,但好像没有类似的规范。⼆、为什么要有 Reactive Streams因为很多⼚商开发了 reactive 库,但是它们直接很难/不可能互操作。⽤ Reactive Streams 进⾏规范就使得它们可以互操作,也就让它们串起来形成⼀个 reactive 链成为了可能。三、为什么要⽤ Reactive因为 reactive 可以榨⼲ CPU…,所以从⽼板的⾓度讲是省钱、从环保的⾓度讲是省电、从码农的⾓度讲是有意思。四、Java 世界⾥知名的 Reactive 库1. RxJava从 Reactive 宣⾔、到 Reactive Streams 规范,再到各种 Reactive 库是很⾃然的⼀个脉络。但现实是⼤家先有了 Reactive 系统的思想,聪明的程序开发出各种蕴含着 reactive 思想的库(⽐如 RxJava 1.0)。为了各个库之间的统⼀性、可操作性,⼤家⼀起协商出了Reactive Streams 规范。继⽽这些已经存在的 reactive 库便改进⾃⼰的 API 设计,向 reactive streams 规范靠拢并提供各种转化 api让⽤户在原⽣ api 和 reactive streams 接⼝直接转换。⽐如 RxJava 2.0 的 Flowable 就直接继承⾃ her并提供了 toObservable() toFlowable()。因为各个库的实现细节不同,⽤到具体转换 api 需要参考其⼿册。RxJava虽然是java ractive编程的领路⼈,并且RxJava跟Project Reactor 3.0 基本是等价的。但是考虑到Spring⽣态的强⼤,估计其前途不会太光明了。2. JDK1.9 (Flow)这个规范被的 API 形式定义从 JDK 9 这个版本开始,以 静态⼦类的形式被定义。其实,既然已经有了 ve-streams 这样的规范,为什么还要在 JDK 中弄出个 Flow 来再重新定义⼀次。难道就是要宣⽰ JDK ⾃⾝有⽀持 reactive streams 的东西?这个思路的本意应该就像 JDBC 接⼝⼀样,让 Flow ⾥定义的接⼝成为 SPI,让不同供应商的 reactive sreams 可互操作吧。所以 JDK ⾥的 Flow 中定义的东西不能算是库,⽽是个 SPI:Service Provider Interface。3. Vert.x、MongoDB 响应式流驱动这些都做了改进以符合 ve-streams 中的 API 定义。其中Vert.x不仅提供了对 java 的 reactive 库,还有 JavaScritp、Ruby、Scala 等。4. Spring 的 Project Reactor有了 Project Reactor 这样的基础库,整个 Spring 组件基本都有了 Reactive Style 的版本,在这个基础上⽤ Netty(或 Servet 3.1 Containe)+Reactive Streams 适配层 + Spring Security Reactive + WebFlux + Spring Data Reactive Repository,就可以构建出重头到尾的 Reactive 应⽤。从 Spring Cloud 的组件⾓度讲,也衍⽣出 Reactive Discovery Client, Reactive Load Balancer, Blockhound, Reactor Debug,Improved Reactor Micrometer Support, Reactor Netty Metric …5. AkkaAkka Stream:

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690216951a316326.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信