分享不易,关注转发,不间断分享工作中的感悟
举一个简单的例子,一个人最近搬到了一个新城市,他喜欢从一杯咖啡和一份报纸开始新的一天。他准备了一杯咖啡,然后去商店买了一份报纸。好几天,他都在遵循同样的程序。一天美好的一天,他意识到去买一份报纸的想法每天都变得更加耗时和复杂。
如果有一个系统,可以订阅报纸并且每天有人把报纸送到家门口,这样他就可以同时进行其他活动。
虽然例子不是那么恰当,但是这是反应式编程背后的核心思想。
反应式编程是一种设计范式,它适用于发布者-订阅者、事件驱动的方法,使开发人员能够构建能够处理背压(流量控制)的非阻塞、响应式、异步应用程序。反应式系统更好地利用现代处理器,并且在反应式编程中包含反压确保解耦组件之间更好的弹性和韧性。
反应式系统是低延迟、高吞吐量工作负载的理想选择。
Reactor Library是一种基于反应流的高级工具,用于在 JVM 上构建非阻塞应用程序,这个库可以很容易地与在 Spring Frameworks 上开发的应用程序集成,Java 9 还提供了对响应式流的支持。
上面已经介绍报纸订阅模型的示例,现在试着将相同的内容放入Reactive Streams的 4 个关键接口中,它们是:
下面看看其中的关键接口:
发布者是可能无限数量的有序元素(数据流)的提供者,根据从订阅者收到的需求发布它们。一个发布者可以为多个在不同时间点动态订阅的订阅者提供服务。
subscribe()方法用于请求发布者开始数据流。
订阅表示订阅者订阅发布者的一对一生命周期。它只能由单个订阅者使用一次。
request()方法用于发送对数据的信号需求。如果没有调用触发该方法,发布者不会发出任何数据,而cancel()方法是请求发布者停止发送数据并清理资源。
订阅者消费发布者发布的数据流。
订阅者使用on Subscribe()方法订阅订阅,以接收发布者发出的数据。每当发布者发出数据时,所有注册的订阅者都会在onNext()方法中获得带有相应数据的信号。如果发布者抛出错误,订阅者将在onError()中接收它。在发出所有数据流后,发布者通过onComplete()方法发送一个成功的终端信号。
处理器代表一个处理阶段——它既是订阅者又是发布者,并遵守两者的合同。
| 留言与评论(共有 0 条评论) “” |