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.
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. –
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. –