编程语言
首页 > 编程语言> > java-Project Reactor:如何延迟(节流)每个元素的发射?

java-Project Reactor:如何延迟(节流)每个元素的发射?

作者:互联网

考虑以下通量

Flux.range(1, 5)
  .parallel(10)
  .runOn(Schedulers.parallel())
  .map(i -> "https://www.google.com")
  .flatMap(uri -> Mono.fromCallable(new HttpGetTask(httpClient, uri)))

HttpGetTask是一个Callable,在这种情况下其实际实现是无关紧要的,它对给定的URI进行HTTP GET调用,如果成功,则返回内容.

现在,我想通过引入人为延迟来减慢发射速度,这样就可以同时启动多达10个线程,但是HttpGetTask完成后每个线程不会立即完成.例如,说没有线程必须在3秒之前完成.我该如何实现?

解决方法:

如果要求确实是“不少于3s”,则可以使用Mono.fromCallable(…).delayElement(Duration.ofSeconds(3))在flatMap中为Mono添加3秒的延迟.

标签:project-reactor,reactive-programming,java
来源: https://codeday.me/bug/20191026/1933136.html