Акка Актер Выбор с недействительными именами - PullRequest
0 голосов
/ 15 мая 2018

Я читаю документы Akka на Выбор актера и пытаюсь понять, как это работает. В частности, я пытаюсь понять Соглашение об именах, которое Akka использует для задания путей к конкретным актерам на основе их местоположения в «дереве» актеров и их имени.

Мое понимание -

  • Все актеры доступны по «корневому» пути, называемому /user/
  • При создании (через actorSystem.actorOf(Props[ActorClassImpl], name = "SomeName")) всем действующим лицам присваивается name
  • « путь » к актеру - это префикс /user/ плюс путь иерархии (см. Ниже) плюс их name
  • «Путь к иерархии» - это конкатенация всех родителей между /user/ и актером

Следовательно, если актер с именем fizz является актором корневого уровня, и у него есть дочерний элемент с именем buzz, а сам этот дочерний элемент имеет дочерний элемент с именем foo, тогда путь к foo равен /user/fizz/buzz/foo, да?

Итак, для начала, если мое понимание того, как работает эта базовая конструкция пути, неверно, пожалуйста, начните исправлять меня! Если предположить, Я более или менее прав, есть ли какие-нибудь "недействительные" имена для актеров, например, актеров с пробелами или пунктуацией в их именах?

1 Ответ

0 голосов
/ 15 мая 2018
  • Все актеры доступны по «корневому» пути, называемому /user/

Все созданные пользователем актеры находятся под "/user/" актером-хранителем. Актер в "/" является корневым хранителем. Есть другие актеры, которые находятся под корневым хранителем, как описано здесь .

  • При создании (через actorSystem.actorOf(Props[ActorClassImpl], name = "SomeName")) всем актерам присваивается имя

В этом примере актер верхнего уровня ActorClassImpl создается с именем "SomeName".

  • «путь» к актеру - это префикс /user/ плюс путь иерархии (см. Ниже) плюс их name
  • «Путь к иерархии» - это конкатенация всех родителей между /user/ и актером

Следовательно, если субъект с именем fizz является субъектом корневого уровня, и у него есть дочерний элемент с именем buzz, а сам этот дочерний элемент имеет дочерний элемент с именем foo, тогда путь к foo будет / user / fizz / buzz / Фу, да?

Для созданных пользователем актеров , это частично правильно. путь актера также включает в себя привязку. Например:

"akka://MyActorSystem/user/fizz/buzz/foo"                      // local
"akka.tcp://MyActorSystem@somehost.com:1234/user/fizz/buzz/foo // remote

... есть ли «недопустимые» имена для актеров, например, актеров с пробелами или пунктуацией в их именах?

Из документации :

Параметр name является необязательным, но желательно указывать имена своих актеров, поскольку они используются в сообщениях журнала и для идентификации актеров. Имя не должно быть пустым или начинаться с $, но оно может содержать символы в кодировке URL (например, %20 для пробела). Если данное имя уже используется другим потомком того же родителя, выдается InvalidActorNameException.

...