Я создал простой сценарий.Следующие системы акторов:
akka.tcp://TestSystem@127.0.0.1:2560
akka.tcp://TestSystem@127.0.0.1:2570
akka.tcp://TestSystem@127.0.0.1:2580
Идея состоит в том, чтобы создать "SampleActor" из 127.0.0.1:2570, но развернуть создание актера в 127.0.0.1:2560 с использованием конфигурации, указанной в документации: Удаленное создание актеров
akka {
actor {
deployment {
/sampleActor {
remote = "akka.tcp://TestSystem@127.0.0.1:2560"
}
}
}
}
А затем 127.0.0.1:2570:
system.actorOf(Props.create(SampleActor.class), "sampleActor");
Теперь с 127.0.0.1:2580 я хочу найти удаленного развернутого актера иОтправить сообщение.Согласно документам: Поиск удаленных актеров
ActorSelection selection =
system.actorSelection("akka.tcp://TestSystem@127.0.0.1:2560/user/sampleActor");
selection.tell("Pretty slick", ActorRef.noSender());
Однако это не работает.Он не может найти актера на 127.0.0.1:2560.Но это работает, если я изменяю на:
ActorSelection selection =
system.actorSelection("akka.tcp://TestSystem@127.0.0.1:2570/user/sampleActor");
selection.tell("Pretty slick", ActorRef.noSender());
Разница в том, что на первом я ищу актера, где он развернут, в этом случае в 127.0.0.1:2560, как говорят документыи во втором случае я ищу актера, где было определено создание актера, в данном случае это 127.0.0.1:2570.Почему это происходит? Это не имеет смысла, если я ищу удаленного актера, тогда я должен посмотреть на место, где он был развернут правильно?Также при печати родительского объекта на развернутом актере я получаю:
akka://TestSystem/remote/akka.tcp/TestSystem@127.0.0.1:2570/user
Это делает его более запутанным, поскольку не совпадает с описанным в документации: Взаимодействие с удаленным развертыванием Всеиз-за этого это действительно сбивает с толку, документы очень длинные и не объясняют должным образом, как правильно делать некоторые основные вещи.Может кто-нибудь помочь мне разобраться в этом вопросе?