扫描Akka Actor

问题描述:

我有一个节点可能正在运行多个服务器实例(Akka remote actor)。我希望客户能够扫描给定节点上的一系列端口以查找实时服务器。扫描Akka Actor

我写在我的客户演员这个方法:

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]}) 
    } 

我想知道,有没有得到这个工作更习惯的方法?虽然我想这个用例相当普遍,但我无法在这方面找到太多内容。

听起来就像你在群集之后。在Akka 2.1发布(内置群集支持)之前,您可以使用类似ZooKeeperJGroups或其他方式在节点注册时注销它们,当它们离开(或超时)时注销

+0

是的,基本上我正在设置群集每个“集群”都有一个任意的头节点来同步它的同伴。我希望留在Scala标准库和Akka框架内,以避免引入另一个依赖。我应该由Akka现在的主管负责,但我期待着即将到来的集群支持。谢谢(你的)信息。 –

+0

那么,你可以通过建立一个你所拨入的聚合节点来跟踪客户端。然而,分布式错误检测远非微不足道,这就是为什么我们将集群作为2.1的主要特性发布的原因 –