使用Reactor库进行反应式编程


使用Reactor库进行反应式编程


分享不易,关注转发,不间断分享工作中的感悟

举一个简单的例子,一个人最近搬到了一个新城市,他喜欢从一杯咖啡和一份报纸开始新的一天。他准备了一杯咖啡,然后去商店买了一份报纸。好几天,他都在遵循同样的程序。一天美好的一天,他意识到去买一份报纸的想法每天都变得更加耗时和复杂。

如果有一个系统,可以订阅报纸并且每天有人把报纸送到家门口,这样他就可以同时进行其他活动。

虽然例子不是那么恰当,但是这是反应式编程背后的核心思想。

反应式编程是一种设计范式,它适用于发布者-订阅者、事件驱动的方法,使开发人员能够构建能够处理背压(流量控制)的非阻塞、响应式、异步应用程序。反应式系统更好地利用现代处理器,并且在反应式编程中包含反压确保解耦组件之间更好的弹性和韧性。

反应式系统是低延迟、高吞吐量工作负载的理想选择。

Reactor Library是一种基于反应流的高级工具,用于在 JVM 上构建非阻塞应用程序,这个库可以很容易地与在 Spring Frameworks 上开发的应用程序集成,Java 9 还提供了对响应式流的支持。

上面已经介绍报纸订阅模型的示例,现在试着将相同的内容放入Reactive Streams的 4 个关键接口中,它们是:

  • 出版商 -一家报社
  • 订阅 -报纸的订阅。
  • 订阅者 -阅读报纸的人
  • 处理器 -将报纸送到您家门口的人。这个角色同时具有发布者和订阅者的特征,因为处理器从发布者(报纸代理机构)订阅报纸并将相同的报纸发布给订阅者(阅读报纸的人)

下面看看其中的关键接口:

发布者是可能无限数量的有序元素(数据流)的提供者,根据从订阅者收到的需求发布它们一个发布者可以为多个在不同时间点动态订阅的订阅者提供服务。

subscribe()方法用于请求发布者开始数据流。

订阅表示订阅者订阅发布者的一对一生命周期。它只能由单个订阅者使用一次。

request()方法用于发送对数据的信号需求。如果没有调用触发该方法,发布者不会发出任何数据,而cancel()方法是请求发布者停止发送数据并清理资源。

订阅者消费发布者发布的数据流。

订阅者使用on Subscribe()方法订阅订阅,以接收发布者发出的数据。每当发布者发出数据时,所有注册的订阅者都会在onNext()方法中获得带有相应数据的信号。如果发布者抛出错误,订阅者将在onError()中接收它。在发出所有数据流后,发布者通过onComplete()方法发送一个成功的终端信号。

处理器代表一个处理阶段——它既是订阅者又是发布者,并遵守两者的合同。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章