Akka远程演员选择与配置

时间:2015-11-13 12:56:21

标签: akka akka-cluster

有没有办法为Akka docs中指定的远程角色选择设置远程角色创建的配置:

akka {
  actor {
    deployment {
      /sampleActor {
        remote = "akka.tcp://sampleActorSystem@127.0.0.1:2553"
      }
    }
  }
}

我不想为此定义自定义变量。

system.actorSelection("sampleActor")

1 个答案:

答案 0 :(得分:1)

演员选择方法只有两种形式,来自docs:

  

def actorSelection(path:ActorPath):ActorSelection

     

从给定路径构造akka.actor.ActorSelection,即   解析为通配符(这些被正则表达式替换)   内部)。没有试图验证任何部分的存在   提供的路径,建议发送消息并收集   回复以解决匹配的演员集。

     

def actorSelection(path:String):ActorSelection

     

构建体   来自给定路径的akka​​.actor.ActorSelection,它被解析   通配符(这些在内部由正则表达式替换)。没有   尝试验证所提供的任何部分的存在   路径,建议发送邮件并收集回复   为了解决匹配的演员集。

而且还是从字符串创建了一个ActorPath:

  

DEF   fromString(s:String):ActorPath

     

将字符串解析为actor路径;如果无法执行,则抛出java.net.MalformedURLException。

因此,仅通过在config中设置特定值,就没有直接的方式来进行演员选择。但是从config中提取值并将其用于actor选择非常容易。鉴于配置:

akka {
  actor {
    selections: {
      sampleActor: {
        path: "akka.tcp://sampleActorSystem@127.0.0.1:2553/user/sampleActor"
      }
    }
  }
}

您可以使用:

val sampleActorSelection = 
  system.actorSelection(
    system.settings.config.getString("akka.actor.selections.sampleActor.path"))

如果这是您经常使用的方法,则可以使用隐式类向系统添加辅助方法:

implicit class ActorSystemExtension(system: ActorSystem) {

  def actorSelectionFromConfig(actorName: String): ActorSelection {
    system.actorSelection(
        system.settings.config.getString(s"akka.actor.selections.${actorName}.path"))
  }
}