cache()Flux和replay()ifpublish()创建热门发布者有什么区别?对于哪种用例,哪种运算符最适合?
以下示例使用 3 种不同的方法重播所有 5 个元素。
cache():
var flux = Flux.fromStream(Stream.of(1,2,3,4,5))
.delayElements(Duration.ofSeconds(1)).cache();
flux.doOnNext(v -> System.out.println("First: " + v))
.subscribe();
Thread.sleep(5000);
flux.doOnNext(v -> System.out.println("Second: " + v))
.subscribe();
Thread.sleep(10000);
Run Code Online (Sandbox Code Playgroud)
replay():
var flux = Flux.fromStream(Stream.of(1,2,3,4,5))
.delayElements(Duration.ofSeconds(1)).replay();
flux.doOnNext(v -> System.out.println("First: " + v))
.subscribe();
Thread.sleep(5000);
flux.doOnNext(v -> System.out.println("Second: " + v))
.subscribe();
flux.connect();
Thread.sleep(10000);
Run Code Online (Sandbox Code Playgroud)
publish():
var flux = Flux.fromStream(Stream.of(1,2,3,4,5))
.delayElements(Duration.ofSeconds(1)).publish();
flux.doOnNext(v -> System.out.println("First: " + v))
.subscribe();
Thread.sleep(5000);
flux.doOnNext(v -> System.out.println("Second: " + v))
.subscribe(); …Run Code Online (Sandbox Code Playgroud)