Project Reactor:如何延迟(节流)每个元素的排放?

时间:2017-05-10 14:47:51

标签: java reactive-programming project-reactor

考虑以下Flux

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个线程同时启动,但每个线程都不会在{{1 }} 已经完成了。例如,假设没有线程必须在3秒之前完成。我如何实现这一目标?

1 个答案:

答案 0 :(得分:4)

如果要求确实“不低于3秒”,则可以使用MonoflatMap内的Mono.fromCallable(...).delayElement(Duration.ofSeconds(3))添加3秒的延迟。