Java 循环直到 webclient 返回 Mono 的条件

Java Loop until condition for webclient returning Mono

我有一个 java 网络客户端代码,我将其响应转换为 Mono。我想迭代 api 调用,直到 Mono 响应符合特定条件。当然我不想迭代到无穷大。我想每 5 秒迭代一次,直到 30 秒。到目前为止我已经试过了

client.get()
                .uri("https://someUri")
                .retrieve()

                .bodyToMono(Response.class)
                .delayElement(Duration.ofSeconds(5))
                .retryBackoff(5, Duration.ofSeconds(5))
                .delayUntil(r -> {
                    System.out.print("Looping"); 
                    if(condition) {
                        System.out.print(r.getStatus());
                        return Mono.just(r);
                    }
                    return Mono.empty();
                })

但是没用。

您可以像这样使用过滤器、repeatWhenEmpty 和 Repeat

client.get()
    .uri("https://someUri")
    .retrieve()
    .bodyToMono(Response.class)
    .filter(response -> condition)
    .repeatWhenEmpty(Repeat.onlyIf(r -> true)
        .fixedBackoff(Duration.ofSeconds(5))
        .timeout(Duration.ofSeconds(30)))

Repeat class 是 reactor-extra 库的一部分

<dependency>
    <groupId>io.projectreactor.addons</groupId>
    <artifactId>reactor-extra</artifactId>
</dependency>