Реактор проекта: Как задержать выброс (газа) каждого элемента?
Рассмотрим следующее 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))
,