【问题标题】:Project Reactor: How to delay emission of (throttle) each element?Project Reactor:如何延迟(节流)每个元素的排放?
【发布时间】:2017-10-09 07:18:13
【问题描述】:

考虑以下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 个线程,但每个线程都不会在 HttpGetTask 时立即完成已经完成了。例如,说没有线程必须在 3 秒之前完成。我该如何实现?

【问题讨论】:

    标签: java reactive-programming project-reactor


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2021-04-08
      • 2012-01-07
      相关资源
      最近更新 更多