2011-11-23 3 views
1

J'ai un nœud qui peut exécuter plusieurs instances d'un serveur (Akka Remote Actor). J'aimerais que les clients puissent analyser une gamme de ports sur un nœud donné à la recherche de serveurs actifs.Recherche des acteurs Akka

j'ai écrit cette méthode dans mon acteur client:

private def scanHost(serverHost: String) = { 
    val initialPort = 36627 
    val portsToScan = (initialPort until initialPort + 32).toList 
    val tries = portsToScan map { 
     port ⇒ remote.actorFor("EnMAS-service", serverHost, port) ? Discovery 
    } 
    val replies = tries filter { future ⇒ { 
     try { 
     future.get match { 
      case reply: DiscoveryReply ⇒ true 
      case _ ⇒ false 
     } 
     } 
     catch { case _ ⇒ false } 
    }} 
    ClientManager.ScanResult(replies map {_.get.asInstanceOf[DiscoveryReply]}) 
    } 

Je me demande, est-il un moyen plus idiomatiques pour y parvenir? Je n'ai pas trouvé grand-chose à ce sujet, bien que j'imagine que ce cas d'utilisation est assez commun.

Répondre

3

On dirait que vous recherchez un cluster. Jusqu'à ce qu'Akka 2.1 soit livré (avec prise en charge intégrée), vous pouvez utiliser quelque chose comme ZooKeeper ou JGroups ou autrement pour que les noeuds s'enregistrent lorsqu'ils démarrent et annulent leur enregistrement lorsqu'ils quittent (ou expirent)

+0

Oui, essentiellement, je configure des groupes sur la mouche où chaque "cluster" a un nœud de tête arbitraire qui synchronise ses pairs. J'espérais rester dans les librairies standard de Scala et le framework Akka pour éviter d'introduire une autre dépendance. Je devrais être couvert par les superviseurs actuellement intégrés à Akka mais j'attends avec impatience le prochain soutien de groupe. Merci pour l'info. –

+0

Eh bien, vous pouvez ad-hoc en ayant un nœud de rendez-vous dans lequel vous appelez et qui garde une trace des clients. La détection d'erreurs distribuées est loin d'être triviale, ce qui explique pourquoi nous libérons la mise en grappe en tant que caractéristique principale pour 2.1. –

Questions connexes