spring-webflux - 了解 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 控制器进入的流,那么先前请求的速度会减慢吗?还是仅仅因为基于当前活动请求的减速而导致活动通量流减速而应用背压?
解决方案
AFlux
是 a Publisher
,它通过处理 aSubscription
到 a来连接到“请求” Subscriber
。每个Subscriber
都有自己的Subscription
,因此您可以将这种关系视为单个请求的具体化,而Publisher
更像是端点(如果我们简化并仅考虑冷发布者,即为每个订阅者生成专用数据集的发布者)。
背压由Subscriber
调用驱动Subscription#request
,因此在每个请求的级别上是分开的。
推荐阅读
- php - 因为当每个复选框选择多个类别时,数据库中只显示一个
- c# - 是否有工具或策略可以找出项目需要引用的所有 .dll 和 nuget 包?
- .net - 如何在 DevExpress XtraReport 详细信息带中对计算字段中的值进行分组?
- python - 在 django 中创建联系我们页面时出错?
- jquery - 从 FileList Ajax 上传之前删除文件
- apache-spark - 循环导出 pyspark 数据帧并合并为一个 df
- swift - swift中的Error.LocalizedDescription用法
- python - Python 字符串的两种实现与 unicode 整数等价物列表的计算时间差异很大的原因
- javascript - 如何在单个 Google Analytics 帐户上配置多个域
- r - R - 根据参数获取列表中每个数据框的列名