我们正在使用带有反应弹簧数据cassandra模块的springboot 2.0。 我们有以下一段代码
Flux.range(1,10000).flatMap(this::getData).subscribe(new BaseSubscriber<List<Data>>() {
@Override
protected void hookOnSubscribe(Subscription subscription) {
subscription.request(1);
}
@Override
protected void hookOnNext(List<Data> value) {
request(1);
}
});
public Mono<List<Data>> getData(int n){
//cassandra reactive call to get List of data
}
我们面临的问题是,即使我们使用BaseSubscriber进行背压,也会调用getData获取最大整数值。由于这个要求是在cassandra的时间。我认为当我们使用flatmap并且getData返回单声道时,不会应用背压。我们必须使用flatmap,因为在单声道错误上我们返回mono.empty以保持请求其余整数的数据。有人可以帮助在这种情况下应用背压吗?
答案 0 :(得分:0)
有flatMap
的重载,您可以在其中设置concurrency
参数(实际上更多是并行因子)和prefetch
参数(默认为256)。最后一个是第一次请求内部通量的数量,因此您可以将其设置为1
。