Повторно использовать существующего актера?

1

Как только актер создан:

final ActorRef greeter = getContext().actorOf(
        Props.create(MyActor.class , "myactor"));

Можно ли повторить ссылку на этого же актера? Причина, о которой я прошу, я пытаюсь хранить некоторые данные в актере, на который могут ссылаться другие участники.

Что происходит при повторном вызове greeter:

final ActorRef greeter = getContext().actorOf(
        Props.create(MyActor.class , "myactor"));

Повторяется ли "приветственный" актер?

  • 1
    Да, он восстановлен, и вы получаете исключение, потому что оба актера имеют один и тот же уникальный идентификатор "myactor" , ActorRef являются «указателями» для актера, вы должны передать их или сохранить в каком-то синглтоне, к которому вы сможете получить доступ в любом месте вашего проекта.
Теги:
akka

1 ответ

3
Лучший ответ

Если вы вызываете actorOf несколько раз с тем же классом, то вы получаете несколько экземпляров этого актера, поэтому они не будут делить состояние. Если вы попытаетесь создать несколько участников с одним и тем же путем, вы получите сообщение об ошибке - как сказал Энде, только один актер может жить по тому же пути.

Вы можете посмотреть актера с его пути. Подробнее об актерских путях в документах akka: http://doc.akka.io/docs/akka/2.3.6/general/addressing.html

Или, может быть, лучшая альтернатива - менее хрупкая, передайте actorRef. ActorRef являются неизменными, поэтому их можно безопасно отправлять как сообщения, поэтому, если вы создаете актера внутри другого, вы можете определить протокол для запроса ссылки на него из своего родителя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню