Понимание противодавления в webflux - PullRequest
0 голосов
/ 05 марта 2020

Я новичок в Reactive / Webflux и пытаюсь понять обратное давление в Webflux. У меня есть следующий контроллер. Наше приложение принимает JSON запрос на поиск и отвечает потоком потока.

@PostMapping(path = "/search",
            consumes = MediaType.APPLICATION_JSON_VALUE,
            produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
public Flux<ResponseContainer> getItineraries(@RequestBody SearchRequest searchRequest){

        return searchService
              .convertToFlux(searchRequest)
              .map(<do some transformations>)
              .map(<WebClientRequestsDownstream>)
              .map(<aggregrate>);
    }

Применяется ли обратное давление для экземпляра потока или для всех экземпляров в целом? т.е. если у меня есть поток, куда поступают запросы через контроллер webflux, замедлится ли в предыдущих запросах обратное давление на будущие запросы? Или обратное давление будет применяться только из-за замедления в активном потоке, основанном на замедлении в текущем активном запросе?

1 Ответ

0 голосов
/ 06 марта 2020

A Flux - это Publisher, который связан с «запросом» путем обработки Subscription с Subscriber. Каждый Subscriber получает свой собственный Subscription, поэтому вы можете рассматривать эти отношения как материализацию отдельного запроса, тогда как Publisher больше похож на конечную точку (если мы упростим и рассмотрим только холодные издатели, ie. Издатели которые генерируют выделенный набор данных для каждого подписчика).

Обратное давление управляется Subscriber, вызывающим Subscription#request, поэтому оно разделяется на уровне каждого запроса.

...