有没有办法为Akka docs中指定的远程角色选择设置远程角色创建的配置:
akka {
actor {
deployment {
/sampleActor {
remote = "akka.tcp://sampleActorSystem@127.0.0.1:2553"
}
}
}
}
我不想为此定义自定义变量。
system.actorSelection("sampleActor")
答案 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"))
}
}