Java 反应流简介
反应流的定义、标准构成元素以及这些元素在 Java 中的实现方式:
-
Flow.Publisher 接口:
该接口描述了条目的生产者。 - Flow.Subscriber 接口:
该接口描述了条目的使用者(即消费者)。 - Flow.Subscription 接口:
该接口描述了生产者与消费者之间的连接。实现该接口的类可以管理生产者和消费者之间的条目交换。
Flow.Publisher 接口
该接口描述了条目的生产者。它只提供一个方法。
- subscribe() :
该方法接收Flow.Subscriber
接口的一个实现作为参数,并且将该订阅者添加到其内部订阅者列表。
该方法并不返回任何结果。
从内部来看,它使用Flow.Subscriber
接口提供的方法向订阅者发送条目、错误信息和订阅对象。
Flow.Subscriber 接口
该接口描述了条目的消费者。它提供了下述四个方法。
-
onSubscribe() :
该方法由发布者调用,用于完成订阅者的订阅过程。
它向订阅者发送了Flow.Subscription 对象,该对象管理发布者和订阅者之间的通信。 - onNext() :
当发布者想把新条目发送给订阅者时,会调用该方法。
在该方法中,订阅者必须处理该条目。该方法并不返回任何结果。 - onError() :
如果出现了一个不可恢复的错误,而且没有调用其他的订阅者方法,那么发布者将调用该方法。
该方法接收 Throwable 对象作为参数,其中含有已发生的错误。 - onComplete() :
不再发送任何条目时,发布者将调用该方法。
该方法没有参数,也不返回结果。
Flow.Subscription 接口
该对象描述了发布者与订阅者之间的通信。
它提供了两个方法,订阅者可以通过这些方法告诉发布者它们的通信将如何进行。
-
cancel() :
订阅者调用该方法告诉发布者它不再需要任何条目了。 -
request() :
订阅者调用该方法来告诉发布者它需要更多的条目。它将订阅者想要的条目数作为参数。
SubmissionPublisher 类
这个类由 Java 9 API提供,实现了 Flow.Publisher
接口。
它还使用 Flow.Subscription
接口,并且提供向消费者发送条目的方法,这些方法用于了解消费者数量、发布者和消费者之间的订阅关系,以及关闭它们之间的通信。
下面给出了该类比较重要的方法。
-
subscribe() :
该方法由Flow.Publisher
接口提供,用于向发布者订阅一个Flow.Subscriber
对象。 - offer() :
该方法以异步方式调用其onNext()
方法,向每个订阅者发布一个条目。 - submit() :
该方法以异步方式调用其onNext()
方法,向每个订阅者发布一个条目。
资源对任何订阅者都不可用时,进行不间断阻塞。 - estimateMaximumLag() :
该方法对发布者已生成但尚未被已订阅的订阅者使用的条目进行估计。 - estimateMinimumDemand() :
该方法对消费者已请求但是发布者尚未生成的条目数进行估计。 - getMaxBufferCapacity() :
该方法返回每个订阅者的最大缓冲区。 - getNumberOfSubscribers() :
该方法返回订阅者的数量。 - hasSubscribers() :
该方法返回一个布尔值,该值用于指示发布者是否有订阅者。 - close() :
该方法调用当前发布者的所有订阅者的onComplete()
方法。 - isClosed() :
该方法返回一个布尔值,用于指示当前发布者是否已关闭。