【问题标题】:Understanding backpressure in webflux了解 webflux 中的背压
【发布时间】:2020-03-05 12:37:00
【问题描述】:

我是 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-webflux project-reactor reactor-netty


【解决方案1】:

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

背压是由Subscriber调用Subscription#request驱动的,所以在每个请求的层面上是分开的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2019-08-15
    • 1970-01-01
    • 2017-04-12
    • 2018-11-16
    相关资源
    最近更新 更多