Mono / Flux: comment suspendre le fil et attendre événement ou délai d'attente

Andrey:

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

Andrey:

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
}

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=317606&siteId=1
conseillé
Classement