首页 > 解决方案 > 了解 webflux 中的背压

问题描述

我是 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 控制器进入的流,那么先前请求的速度会减慢吗?还是仅仅因为基于当前活动请求的减速而导致活动通量流减速而应用背压?

标签: spring-webfluxproject-reactorreactor-netty

解决方案


AFlux是 a Publisher,它通过处理 aSubscription到 a来连接到“请求” Subscriber。每个Subscriber都有自己的Subscription,因此您可以将这种关系视为单个请求的具体化,而Publisher更像是端点(如果我们简化并仅考虑冷发布者,即为每个订阅者生成专用数据集的发布者)。

背压由Subscriber调用驱动Subscription#request,因此在每个请求的级别上是分开的。


推荐阅读