énoncé du problème: J'ai un portefeuille de titres qui doivent être traités en parallèle. En Java j'ai utilisé un pool de threads pour traiter chaque sécurité, et utiliser un verrou pour le compte à rebours. Une fois terminé, je fais une fusion, etc.fourchette et joindre en utilisant Akka
Donc, je signale mon SecurityProcessor (qui est un acteur), et j'attends que tous les contrats à terme soient terminés. À la fin, j'utilise un MergeHelper pour faire le post-traitement. Le SecurityProcessor prend la sécurité, fait un peu i/o et le traitement et les réponses d'une sécurité
val listOfFutures = new ListBuffer[Future[Security]]()
var portfolioResponse: Portfolio = _
for (security <- portfolio.getSecurities.toList) {
val securityProcessor = actorOf[SecurityProcessor].start()
listOfFutures += (securityProcessor ? security) map {
_.asInstanceOf[Security]
}
}
val futures = Future.sequence(listOfFutures.toList)
futures.map {
listOfSecurities =>
portfolioResponse = MergeHelper.merge(portfolio, listOfSecurities)
}.get
Cette conception est correcte, et est-il une meilleure/refroidisseur moyen de mettre en œuvre ce problème commun à l'aide akka?
vraiment aimé cette suggestion et fonctionne comme prévu que je devais partager et ajouter tas de déclarations Eventhandler.info pour déboguer un problème :( –
débogage def [T] (t: T): T = {EventHandler .info (t); t} –
akka est génial !! –