Akka Удаленный выбор актера с настройкой
Есть ли способ настройки конфигурации для удаленного выбора актера, аналогичного удаленному созданию актора, как указано в документации Akka:
akka {
actor {
deployment {
/sampleActor {
remote = "akka.tcp://sampleActorSystem@127.0.0.1:2553"
}
}
}
}
Я предпочитаю не определять пользовательскую переменную для этого.
system.actorSelection("sampleActor")
1 ответ
Есть только две формы метода выбора актеров из документов:
def actorSelection (путь: ActorPath): ActorSelection
Создайте akka.actor.ActorSelection из заданного пути, который анализируется для подстановочных знаков (они заменяются внутренними регулярными выражениями). Не делается никаких попыток проверить существование какой-либо части предоставленного пути, рекомендуется отправить сообщение и собрать ответы, чтобы разрешить соответствующий набор действующих лиц.
def actorSelection (path: String): ActorSelection
Создайте akka.actor.ActorSelection из заданного пути, который анализируется для подстановочных знаков (они заменяются внутренними регулярными выражениями). Не делается никаких попыток проверить существование какой-либо части предоставленного пути, рекомендуется отправить сообщение и собрать ответы, чтобы разрешить соответствующий набор действующих лиц.
И ActorPath просто создается из строки в любом случае:
def fromString (s: String): ActorPath
Разобрать строку как путь актера; Выдает исключение java.net.MalformedURLException, если не может этого сделать.
Так что нет прямого способа сделать выбор актера, просто установив определенное значение в конфигурации. Однако довольно просто извлечь значение из конфигурации и использовать его для выбора актера. Учитывая конфиг:
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"))
}
}