Есть ли оператор, ограничивающий количество параллельных запросов, обрабатываемых Webclient в Spring WebFlux?

Есть ли какой-либо оператор, аналогичный limitRate для издателя, который можно использовать для ограничения количества параллельных запросов, обрабатываемых Webclient?

Предположим, что нисходящая служба может ответить через несколько секунд. delayElements может использоваться для задержки каждого запроса на несколько миллисекунд. но запрос начнет обработку после задержки, пока другие запросы обрабатываются. Это приведет к перегрузке поставщика услуг.

Сценарий - быстрый производитель, медленный потребитель

Думаю, это связано с исходным вопросом.

Как ограничить количество запросов в секунду с помощью WebClient?

Редактировать:

Я добавил уровень параллелизма в flux flatmap и хотел ограничить скорость запроса к веб-клиенту в flatMap. Но уровень параллелизма не повлиял на запросы к веб-клиенту.

Написал ниже код для имитации поведения.

List<Flux<Integer>> fluxList = List.of(Flux.range(1, 300), Flux.range(301, 300), Flux.range(601, 300));
Flux.mergeSequential(fluxList, 2, 2)
                .flatMap(i -> webClient.get().uri("/some-uri", 2)
                .retrieve().toEntity(Map.class)
                .doOnSuccess(mapResponseEntity -> System.out.println(Thread.currentThread().getName() + " value in flat map : "+i)).subscribeOn(Schedulers.boundedElastic())
                ).subscribe();

Может ли кто-нибудь сообщить мне, как ограничить скорость запроса в приведенном выше коде?


person Gurmin    schedule 30.11.2020    source источник
comment
Я поделился новым ответом на указанный вопрос: stackoverflow.com/a/65075755/6051176 Помогает ли это?   -  person Martin Tarjányi    schedule 30.11.2020
comment
Это также может быть полезно для вашего варианта использования: stackoverflow.com/a/57203997/6051176   -  person Martin Tarjányi    schedule 30.11.2020
comment
Спасибо @ MartinTarjányi. Добавление уровня параллелизма в flatMap подходит для моего случая использования. Благодарю за быстрый ответ!   -  person Gurmin    schedule 30.11.2020