2016-04-22 2 views
0

Exploration du classeur de client HTTP Feign et je vois qu'il does not support résultats de rappel (DeferredResults). Comment puis-je gérer la création d'un point de terminaison évolutif pour effectuer de nombreuses tâches intensives en parallèle? En essayant d'éviter quelque chose comme ceci:Créer une solution évolutive sans Futures?

val slowComputation : Future[Array[Bytes] = ??? 

def endpoint = { 
    Await.result(slowComputation(), Duration(1, SECONDS)) 
} 
+0

Vous pouvez jeter un oeil aux collections parallèles scala – alifirat

+0

Merci pour votre commentaire. Je ne suis pas sûr que je peux parce que chaque tâche est indépendante, en mutant un fichier audio par exemple par requête. Ils ne sont pas agrégés - mais traités et renvoyés à leur client respectif. – tgk

Répondre

1

Est-ce que je comprends bien: Le « point final def » est une méthode de blocage synchrone, et vous ne pouvez pas changer ce fait, car elle dictée par un cadre? Maintenant, cela signifie que vous devez bloquer là en attendant que le calcul/IO revienne à vous. Cela signifie également que vous utilisez un thread là-haut.

Je pense que le mieux que vous pouvez faire pour éviter de «surcharger» ce point de terminaison avec de nombreux threads en attente. Donc:

  • Comme vous l'avez fait, spécifiez un délai d'expiration. Réfléchissez au nombre de «threads en attente» que vous êtes prêt à accepter.
  • Puis jetez plus de demandes si beaucoup attendent. Comme:
val waiting = new AtomicInteger(0) 
val maxThreadsWaiting = 200 

def endpoint() ={ 
    try{ 
     val numberThreadsWaiting = waiting.incrementAndGet() 
     if(numberThreadsWaiting > maxThreadsWaiting) { 
      // Return 'overload' failure. Like HTTP 503 
     } else{ 
      Await.result(slowComputation(), Duration(1, SECONDS)) 
     }  
    } finally { 
     waiting.decrementAndGet() 
    } 
} 
+0

Merci Gamlor, des notes géniales, ouais exactement je suis limité par le framework, donc c'est agréable d'entendre que je vais devoir gérer les threads d'une certaine façon et votre exemple aide. – tgk