Je voudrais demander conseil comment résoudre avec Mono / Flux de suspension et réactivant par un retard ou délai d'attente.
La tâche est: l'application recevra requête HTTP et doit fournir une réponse.
Lorsque la demande est reçue en utilisant le message de async doit être envoyé. Et nous avons besoin d'attendre pour répondre de façon précise, mais pas plus de 30 secondes.
Je dois donc suspendre fil jusqu'à ce que certains Runnable sera appelée, ou une autre option est chaque requête 0,2 s une variable et si elle réglée sur la valeur pertinente poursuivre le processus.
Pourriez-vous s'il vous plaît me donner quelques suggestions?
Je vous remercie
J'ai finalement trouvé la solution.
Peut-être pas le plus élégant, mais des œuvres, en utilisant récursion
Ce code interrogation état variable pour obtenir une réponse positive, mais pas plus de délai d'attente de 10 secondes.
val delayDuration = Duration.ofMillis(200)
val maximumAttempts = 50
fun createDelayedMono(counter : Int) : Mono<BigInteger> {
val mono = Mono.delay(delayDuration).flatMap {
it ->
if (counter < maximumAttempts && reactorHelper.isEventCompleted(rrn)) {
reactorHelper.removeEvent(rrn)
return@flatMap Mono.just(BigInteger.ZERO)
} else {
return@flatMap createDelayedMono(counter + 1)
}
}
return mono
}