InvalidActorNameException - имя актера {имя} не уникально

Таким образом, я начинаю использовать актеров Akka в моей Игре 2.0 приложения. Я заметил быстро, что повторил призывы к отправке сообщений тому же самому актеру, определенному через:

val myActor = Akka.system.actorOf(Props[MyActor], name = "myactor")

Приведший к InvalidActorNameException .

I then started reading up on the creation of Actors in this doc

Доктор, казалось, рекомендовал создать "основной" класс Актера со всеми отдельными актерами, определенными там. получают этого класса актера, в свою очередь, соответствовал бы на сообщении и делегировал бы сообщение соответствующему Актеру.

Таким образом, я попробовал это, и теперь имейте что-то как:

class MasterActor extends Actor{
  import context._
  val emailActor = actorOf(Props[EmailActor], name = "emailActor")
  protected def receive = {
    case reminder : BirthdayReminder => emailActor ! reminder
  }

}

Проблема состоит в том, что я нахожусь в той же самой ситуации, которой я был прежде. Я не знаю, как избежать InvalidActorNameException , когда я пробую что-то как:

    val myActor = Akka.system.actorOf(Props[MasterActor], name = "MasterActor")
    myActor ! BirthdayReminder(someBirthday)

Таким образом, что правильный путь состоит в том, чтобы организовать моих Актеров?

4
nl ja de

1 ответы

Если вы хотите только один MasterActor, почему вы создаете многократные? Необходимо просто искать тот, который вы уже создали:

val actorRef = context.actorFor("MasterActor")
actorRef ! BirthdayReminder(someBirthday)
2
добавлено
Да, можно сделать это везде, где вы хотите, пока это только происходит однажды.
добавлено автор Kim Stebel, источник
Почему вам нужен контекст? Чтобы искать актера, можно также использовать ActorSystem.actorFor
добавлено автор Kim Stebel, источник
@LuxuryMode, actorref ориентирован на многопотоковое исполнение и может быть роздан свободно, но контекст не ориентирован на многопотоковое исполнение и не должен быть роздан между актерами (или другие предприятия) - это - причина его так хорошо скрытый. Контекст актера должен только использоваться из того актера, и только в отзывах Актера.
добавлено автор SoftMemes, источник
Спасибо Ким. Цените свою помощь. Я знаю это, вероятно, глупый вопрос, но где я первоначально создал бы MasterActor? Другими словами, somehwere я должен создать его с system.actorOf, нет?
добавлено автор LuxuryMode, источник
Спасибо Ким. Один последний вопрос: Как я могу захватить контекст за пределами класса, который расширяет Актера? Это val защищен, но мне нужен контекст в другом месте...
добавлено автор LuxuryMode, источник
Бит перепутан. В случае моего приложения Игры я должен инициализировать MasterActor, когда мое приложение начинается (Akka.system.actorOf (Опоры [MasterActor], имя = "MasterActor")) и затем более поздний val masterActor требования = Akka.system.actorFor("MasterActor")?
добавлено автор LuxuryMode, источник
Хм, просто doesn' t, кажется, работают на меня. Мой Актер просто doesn' t, кажется, получают сообщения. I' m выполнение чего-то не так здесь...
добавлено автор LuxuryMode, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Scala User Group
Scala User Group
1 486 участник(ов)

[RU] Scala Chat. Rules, additional links, FAQ: https://telegra.ph/Russian-Speaking-Scala-User-Group-08-27

Scala Jobs
Scala Jobs
852 участник(ов)

Rules: http://telegra.ph/My-lyudi-i-ehto-znachit-chto-nam-nuzhna-organizaciya-02-07 Main Scala Channel: https://t.me/scala_jobs_feed Flood Room: https://t.me/scala_ponv