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

Project Reactor: How to delay emission of (throttle) each element?

考虑以下 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 调用,如果成功则 returns 内容。

现在,我想通过引入人为延迟来减慢发射速度,这样最多 10 个线程 同时启动 ,但每个线程都不会像HttpGetTask 一完成。例如,假设 没有线程必须在 3 秒前完成 。我该如何实现?

如果要求确实是 "not less than 3s",您可以使用 Mono.fromCallable(...).delayElement(Duration.ofSeconds(3)).

flatMap 内的 Mono 添加 3 秒的延迟