在io反应器中使用flatmap的背压

时间:2018-03-15 19:39:56

标签: spring-boot project-reactor spring-data-cassandra

我们正在使用带有反应弹簧数据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以保持请求其余整数的数据。有人可以帮助在这种情况下应用背压吗?

1 个答案:

答案 0 :(得分:0)

flatMap的重载,您可以在其中设置concurrency参数(实际上更多是并行因子)和prefetch参数(默认为256)。最后一个是第一次请求内部通量的数量,因此您可以将其设置为1