如何使用项目反应器定期取样Flux ?



我当前的尝试如下,但这只打印单个值。我希望采样定期继续,以便每秒打印一个值。如何做到这一点?

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import reactor.core.publisher.Flux;
import java.time.Duration;
public class Test {
private static final Logger logger = LogManager.getLogger(Test.class);
public static void main(String[] args) {
Flux.<String>create(sink -> sink.next("HEARTBEAT"))
.sample(Flux.interval(Duration.ofSeconds(1)))
.subscribe(logger::info);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

在您的示例中采样确实周期性地继续-它将每秒采样一次。但是,您的原始Flux.create调用只创建一个值,因此只有一个值可以采样!

如果你把你的Flux.create()换成Flux.generate(),它会流"心跳"。,这样你的抽样就会按预期工作。

最新更新