Реактор проекта: Как задержать выброс (газа) каждого элемента?

Рассмотрим следующее 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 это вызываемый объект, чья фактическая реализация не имеет значения в этом случае, он выполняет HTTP-вызов GET для данного URI и возвращает содержимое в случае успеха.

Теперь я хотел бы замедлить эмиссию, введя искусственную задержку, чтобы до 10 потоков запускались одновременно, но каждый из них не завершился, как только HttpGetTask готово. Например, скажите, что никакая нить не должна заканчиваться раньше, чем через 3 секунды. Как мне этого добиться?

1 ответ

Решение

Если требование действительно "не менее 3 с", вы можете добавить задержку в 3 секунды к Mono внутри flatMap используя Mono.fromCallable(...).delayElement(Duration.ofSeconds(3)),

Другие вопросы по тегам