4

我有点被一个琐碎的任务困住了:每当我使用响应式 spring WebClient 查询外部 API 或查询响应式 MongoDBRepository 时,我想记录有多少实体通过了我的通量,例如。记录消息,如“在数据库中找到 n 条记录。”。例如:

return repository.findAll()
                 .doOnComplete { log.info("Found total n records!") } // how to get the n?
                 .filter { it.age > 10 }
                 .distinct { it.name }

TLDR:完成后如何获得通量大小(也许是它的内容)?

4

3 回答 3

3

您可以使用ConnectableFlux。在您的示例中:

var all = repository.findAll()
             .filter { it.age > 10 }
             .distinct { it.name }
             .publish()
             .autoConnect(2)

all.count()
   .subscribe {c -> log.info("Found total {} records!", c)}

return all;
于 2019-07-15T16:46:32.337 回答
2

通过调用count()。当观察到 onComplete 时,它​​应该发出一个 Mono。

于 2018-08-01T21:10:42.213 回答
-1

这就是我所做的,

AtomicInteger i = new AtomicInteger();
Flux<UserDetails> stringFlux =
                Flux.using(() -> stringStream, Flux::fromStream,
                Stream::close)
                        .doOnNext(s -> i.getAndIncrement())
                        .log()
                        .map(UserDetails::createUserDetails);

stringFlux
                .subscribe(updateUserDetailsService::updateUserDetails);

log.info("number of records: {}", i);
于 2021-02-23T09:27:03.397 回答