Flux.repeat()不重复

时间:2019-06-28 04:50:55

标签: java reactive-programming project-reactor

我试图重复这样的关于Flux的订阅:

    DirectProcessor<String> stringDirectProcessor = DirectProcessor.create();

    stringDirectProcessor
            .repeat(3)
            .subscribe(item -> System.out.println(item));

    stringDirectProcessor.onNext("one");
    stringDirectProcessor.onNext("two");
    stringDirectProcessor.onNext("three");
    stringDirectProcessor.onComplete();

我的期望是看到以下输出:

one
two
three
one
two
three
one
two
three
one
two
three

但我只能得到

one
two
three

但是,如果我使用Flux.just()而不是DirectProcessor,则会得到预期的输出。

怎么了?

1 个答案:

答案 0 :(得分:1)

这是DirectProcessor 的预期行为。我刚刚阅读了documentation,发现了关于DirectProcessor的以下内容:

  

一旦处理器终止(通常是通过接收器的error(Throwable)或complete()方法被调用),它将允许更多订阅者订阅,但立即向他们重播终止信号。

因此,由于repeat只是简单地重新订阅,因此onComplete处理程序将立即在其上调用。您确定需要DirectProcessor吗?

编辑:here

中也记录了此行为
  

注意:如果没有订户,则会删除上游项目,并且仅保留终端事件。终止的DirectProcessor将向晚订户发出终端信号。