Как запустить Akka Actors начиная с 2.0? - PullRequest
14 голосов
/ 29 декабря 2011

Я использую Akka Actors и пытаюсь обновить свой код, чтобы использовать последнюю версию 2.0. API несколько изменился, например, создание Actors теперь работает через нечто, называемое ActorSystem.

Изменены также стартовые и остановочные актеры - последний доступен через ActorSystems методы .stop(..) и .shutdown(). Но я могу за свою жизнь не понять, как их запустить ... Документация хорошая, но, похоже, не хватает некоторых важных моментов. Я чувствую себя глупо спрашивать, но как вы начинаете актеров в вашей среде Akka 2.0? Если я правильно понял, актеры, у которых есть «родитель», запускаются при запуске этого родителя - но как насчет актеров высшего уровня?

1 Ответ

26 голосов
/ 29 декабря 2011

В Akka 2.0 нет необходимости в методе start (), потому что актеры запускаются, как только вы создаете их экземпляр в контексте ActorSystem (или другого Actor) - но вам нужно создать их экземплярс помощью одного из предоставленных методов ActorSystem или Actor context.

Так, например, если у вас есть подкласс Actor с именем MyClass, вы можете начать его с:

val system = ActorSystem()
val myActor = system.actorOf(Props[MyActor])

или, если ваш субъект принял аргументы конструктора:

val myActor = system.actorOf(Props(new MyActor("arg1"))

или, если вы были в теле другого актера,

val myActor = context.actorOf(Props(new Actor("arg1"))

, и тогда ваш актер мог бы немедленно получать сообщения, например,

myActor ! MyMessage

Даже ваш верхАктеры уровня запускаются немедленно, так как все Актеры в 2.0 автоматически находятся в иерархии надзора.Как только актер получает экземпляр ActorSystem, он готов к приему сообщений.

...