2011-12-29 64 views
14

我正在使用Akka Actors我試圖更新我的代碼以使用最新的2.0里程碑。 API改變了一些,例如Actors的創建現在可以通過稱爲ActorSystem的東西來工作。如何從2.0開始Akka Actor?

啓動和停止角色也發生了變化 - 後者可通過ActorSystems方法.stop(..).shutdown()獲得。但我可以爲我的生活不知道如何開始他們... 該文件是好的,但似乎缺少一些重要的一點。我覺得有點愚蠢,但是你如何在你的Akka 2.0環境中創建演員?如果我理解正確的話,那麼當這個父母開始的時候有一個「父母」的演員開始了 - 但是頂級演員怎麼樣?

回答

26

在阿卡2.0,沒有必要爲一個start()方法,因爲演員是隻要你實例化它們在ActorSystem(或其他Actor)的背景下開始了 - 但你需要的一個實例他們所提供的方法ActorSystemActorcontext

因此,舉例來說,如果你有一個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中的所有Actor都自動處於監督層次結構中。只要演員用ActorSystem實例化,就可以接收消息。

+0

哦,我想這很容易讓我明白... *感覺很糟糕*謝謝:) – fgysin 2011-12-30 15:22:42

+0

沒問題!這根本不是一個愚蠢的問題 - 新的行爲一次依賴於兩個新功能(自動監控和自動啓動),如果您習慣1.2或1.3 API,那麼這個功能首先會讓人感到困惑。但一旦你習慣了它,它會更簡單。 – 2011-12-30 15:46:11