Учитывая следующий фрагмент кода
public static void main(String[] args) {
long start = System.currentTimeMillis();
Flux.<Long>generate(s -> s.next(System.currentTimeMillis() - start))
.flatMap(DemoApp::delayedAction)
.doOnNext(l -> System.out.println(l + " -- " + (System.currentTimeMillis() - start)))
.blockLast(Duration.ofSeconds(3));
}
private static Publisher<? extends Long> delayedAction(Long l) {
return Mono.just(l).delayElement(Duration.ofSeconds(1));
}
Из вывода видно, что большое количество событий "обрабатывается" в delayedAction
одновременно. В этом примере 256 событий генерируются в течение нескольких миллисекунд, а затем ждут около секунды, пока они не будут отправлены снова.
Я хочу ограничить это число, например. 10, как я могу это сделать?
Решение не должно зависеть от того, что происходит внутри delayedAction
Фон
Что на самом деле происходит в отложенном действии: я выполняю HTTP-запросы, и запуск неограниченного (или очень большого) количества запросов не кажется хорошей идеей.