2011-12-29 2 views
14

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

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

ответ

26

В Akka 2.0 нет необходимости в методе start(), поскольку Актеры запускаются, как только вы создаете их в контексте ActorSystem (или еще Actor), но вам необходимо создать их экземпляр одним из предоставленные методы ActorSystem или 's 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, он готов принимать сообщения.

+0

О, я думаю, это было легко для меня понять ... * feelstupid * Спасибо :) – fgysin

+0

Без проблем! Это был не глупый вопрос: новое поведение основывается на двух новых функциях сразу (автоматический контроль и автоматический запуск), который сначала запутывает, если вы привыкли к API 1.2 или 1.3. Но это просто, как только вы привыкли к этому. –

Смежные вопросы