i am trying to build one method that should do many HTTP requests to one external endpoint while one query parameter is less than 45000.
I need to do that because the external endpoint allow me to get 100 items but there are more than 44000 items to get.
private int offset = 0;
public Flux<List<Model>> getItems() {
return Flux.from(
webClientBuilder
.build()
.get()
.uri(uriBuilder -> uriBuilder
.path("/getItems")
.queryParam("limit", 100)
.queryParam("offset", getOffset())
.build())
.retrieve()
.bodyToMono(Model.class)
.doOnSuccess(System.out::println)
.flatMap(model -> {
setOffset(getOffset() + 100);
log.info("Offset: " + getOffset());
return repository.saveAll(model.getData().getResults()).collectList();
}).delayElement(Duration.ofSeconds(15)))
.repeat(() -> getOffset() <= 45000);
}
public int getOffset() {
return offset;
}
public void setOffset(int offset) {
this.offset = offset;
}
It seems to work because logs the offset parameter incremented but HTTP requests has offset equals to 0. the method returns first 100 items instead of 44566 items