本系列其他文章见:《响应式Spring的道法术器》。
前情提要:响应式流 | Reactor3快速上手 | 深入理解响应式流规范
2.9 Processor
Processor
既是一种特别的发布者(Publisher
)又是一种订阅者(Subscriber
)。 所以你能够订阅一个Processor
,也可以调用它们提供的方法来手动插入数据到序列,或终止序列。
前面一直在聊响应式流的四个接口中的三个:Publisher
、Subscriber
、Subscription
,唯独Processor
迟迟没有提及。原因在于想用好它们不太容易,多数情况下,我们应该进行避免使用Processor
,通常来说仅用于一些特殊场景。
2.9.1 使用 Sink 来线程安全地生成流
比起直接使用Processor,更好的方式是通过调用sink()
来得到它的Sink。这个Sink是线程安全的,可以用于在应用程序中多线程并发地生成数据。例如,通过UnicastProcessor
得到一个线程安全的 sink:
UnicastProcessor<Integer> processor = UnicastProcessor.create();
FluxSink<Integer> sink = processor.sink(overflowStrategy);
<