【发布时间】:2020-11-22 00:04:27
【问题描述】:
这是一个简化的例子,但它说明了这一点。
假设我有一个这样定义的方法:
Flux<String> generateFlux() {
return Flux.just("hello", "world"); // (S)
}
有没有办法让S 打印一些东西,例如在一个元素被消耗后,而通量的订阅者不必做或知道任何事情?
例如,我要修改S,这样:
generateFlux().doOnNext(System.out::println).block()
实际上将其打印到控制台:
hello
consumed
world
consumed
是否可以使用 Reactor 3.3 做到这一点?如果可以,如何做到?
更新
我想我的问题不清楚,所以我会添加更多细节。我的问题的要点是我希望它不变:
generateFlux().doOnNext(System.out::println).block() // A
所以我想修改S,即Flux.just("hello", "world") 以适应我的要求,而不是A。我知道您可以将subscribe 和doOnNext 等添加到A,但这不是我要问的。我在问是否有办法修改S,以便在不对A 进行任何更改的情况下,当A 的订阅者/消费者处理完所有项目时会打印出来:
hello
consumed
world
consumed
即S 以某种方式接收到第一个元素已被消耗的信号(“hello”),然后它可以执行 doOnNext(或其他),在这种情况下打印“consumer”。当第二个元素被消耗(“world”)时,它应该再次打印“consumed”。
这可能吗?
【问题讨论】:
-
我会提供一些关于为什么这被否决的信息,因为我不知道我应该改变什么以使问题变得更好。
标签: java spring reactive-programming project-reactor