本文介紹了Web客戶端返回Mono的Java循環結束條件的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個Java Web客戶端代碼,我將其響應轉換為Mono。我希望在API調用上迭代,直到Mono響應匹配特定條件。當然,我不想迭代到無限。我想每隔5秒重復一次,直到30秒。到目前為止我已經試過了
數據-lang=”js”數據-隱藏=”假”數據-控制臺=”真”數據-巴貝爾=”假”>
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();
})
但沒用。
推薦答案
您可以使用篩選器,重復WhenEmpty,然后像這樣重復
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類是反應器額外庫的一部分
<dependency>
<groupId>io.projectreactor.addons</groupId>
<artifactId>reactor-extra</artifactId>
</dependency>
這篇關于Web客戶端返回Mono的Java循環結束條件的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,