基于Spring Reactor 3.x文档,DirectProcessor的生产者定义是什么?
咱们先从官方文档对DirectProcessor的核心描述入手:
将onNext、onError和onComplete信号分发给零到多个Subscriber。请注意,除支持多个消费者外,当前DirectProcessor的实现还支持多个生产者。但所有生产者必须在同一线程中生成消息,否则会违反Reactive Streams规范。
在这个语境下,DirectProcessor的生产者,指的是能够向它发送onNext/onError/onComplete信号的对象。接下来逐个拆解选项:
选项1:将DirectProcessor作为参数传入Publisher.subscribe方法的Publisher
这个选项描述的是订阅逻辑,subscribe是Subscriber订阅Publisher的入口,这里的Publisher把DirectProcessor当参数传入,本质是建立订阅关系,并没有向DirectProcessor发送任何信号,所以不属于生产者范畴。选项2:调用DirectProcessor.onNext(T t)的对象
这个完全符合生产者的定义:DirectProcessor本身直接暴露了onNext/onError/onComplete方法,调用这些方法的对象就是在向处理器推送信号,属于DirectProcessor的生产者。选项3:调用FluxSink
.next(T t)的对象(其中FluxSink是DirectProcessor.sink()的返回结果)
这个也正确:DirectProcessor的sink()方法会返回一个FluxSink实例,这是官方推荐的生产信号的标准入口之一,调用FluxSink.next()(或error/complete)的对象,本质就是在向DirectProcessor推送信号,自然属于生产者。
总结:选项2和选项3描述的对象都是DirectProcessor的生产者,选项1不是。
内容的提问来源于stack exchange,提问作者Adrian

