我有点琐碎的任务:每当我使用响应式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:完成后如何获得流量大小(也许是内容)?
答案 0 :(得分:0)
通过调用count()。当观察到onComplete时,它应该发出Mono。
答案 1 :(得分:0)
您可以使用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;
答案 2 :(得分:-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);