Я пытаюсь заблокировать возможность наличия в системе актеров с одинаковым именем (они находятся на разных путях, поэтому InvalidActorNameException
не будет выброшено)
приложение.conf:
someactor {
akka.remote.netty.tcp.port = 6405
akka.cluster.auto-down-unreachable-after = 20s
akka.cluster.seed-nodes = ["akka.tcp://[email protected]:2552"]
akka.actor.provider = "akka.cluster.ClusterActorRefProvider"
}
Главный:
object SomeActor extends App {
val system = ActorSystem("mySys", ConfigFactory.load("application").getConfig("someactor"))
val t = system.actorOf(Props(classOf[SomeActor]), "someActor")
}
Актер:
class SomeActor extends Actor {
val cluster = Cluster(SomeActor.system)
override def receive = {
case x=> println(x)
}
}
Если вы запустите приложение один раз с портом 6405 и один раз с портом 6406, тогда приложение будет работать, но я хочу, чтобы оно заметило, что в системе уже есть актор с именем «someActor», и заблокировало этот вызов.
Я не против добавить имя в качестве роли или в другую конфигурацию, если оно сможет заблокировать это, но я не могу иметь состояние, подобное карте, содержащей уже существующие имена (или актер, содержащий карту с передачей сообщений ) или иметь длительную операцию, такую как actorSelection
(и в любом случае они не будут безопасны, если actorOf
вызывается из нескольких мест параллельно).
SomeActor
, я просто не хочу, чтобы эти актеры имели одно и то же имя (это имя является уникальным идентификатором, который у меня есть в моей программе для каждого рабочего актера, поэтому у меня не может быть дубликатов) - person user_s   schedule 04.01.2017