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