第 10 章 异步流处理:反应流
反应流为带有非阻塞回压(back pressure)的异步流处理定义了标准。这类系统最大的问题是资源消耗。快速的生产者会使较慢的消费者超负荷。这些组件之间的数据队列规模可能过度增加,从而影响整个系统的行为。回压机制确保了在生产者和消费者之间进行协调的队列含有限定数目的元素。
反应流定义了描述必要操作和实体所需的接口、方法和协议的最小集合。它们基于以下三个要素。
- 信息的发布者。
- 一个或多个信息订阅者。
- 发布者和消费者之间的订阅关系。
反应流规范根据以下规则明确了这些类应该如何交互。
- 发布者将添加那些希望得到通知的订阅者。
- 订阅者被发布者添加时会收到通知。
- 订阅者以异步方式请求来自发布者的一个或多个元素,也就是说,订阅者请求元素并继续其执行。
- 发布者有一个要发布的元素时,会将其发送给请求元素的所有订阅者。
如前所述,所有这些通信都是异步的,因此可以充分利用多核处理器的全部性能。
Java 9包含了三个接口,即Flow.Publisher、Flow.Subscriber和Flow.Subscription,以及一个实用工具类,SubmissionPublisher类。它们可支持实现反应流应用程序。本章将介绍如何使用这些元素实现基本的反应流应用程序。
在本章中,你将通过以下主题学习如何使用反应流。
- Java反应流简介。
- 第一个例子:面向事件通知的集中式系统。
- 第二个例子:新闻系统。
