2012-06-26 91 views

回答

-1

我不太確定你在問什麼。

如果演員類是MyClass和消息對象爲Message,你只是做

val myInstance = new MyClass() 
myInstance ! Message 

就是這樣。你可以從任何其他演員中調用它。

+1

這個defintely將無法在阿卡工作 – sourcedelica

5

爲什麼你有2 ActorSystem?除非你有一個非常好的理由,否則你應該在同一ActorSystem中創建所有演員。創建一個ActorSystem是非常昂貴的,通信和錯誤處理都很困難。這裏的通信的參與者之間的一個簡單的例子:

class Foo extends Actor { 

    val barActor = context.actorFor("/user/bar") 

    def receive = { 
    case 'Send => barActor ! "message from foo!" 
    } 
} 

class Bar extends Actor { 
    def receive = { 
    case x => println("Got " + x) 
    } 
} 

object Main { 
    def main(args: Array[String]) { 
    val system = ActorSystem("MySystem") 
    val foo = system.actorOf(Props[Foo], "foo") 
    val bar = system.actorOf(Props[Bar], "bar") 

    foo ! 'Send 
    } 
} 

隨着system.actorForcontext.actorFor,你可以檢索給定路徑的ActorRef。用戶創建的演員的路徑始終始於/user幷包含所有父演員。所以如果你有3名演員的層次結構,路徑可能是/user/actorA/actorB/actorC

+0

另外,如果真的需要2個ActorSystems,Akka Remoting是你如何連接它們。 –

+0

你的意思是這是首選的解決方案,或者這是唯一的方法嗎? (請參閱我的回答) – sourcedelica

0

請參閱docs on Actor Paths。演員路徑包括演員系統。

因此,舉例來說,如果你的演員系統被命名爲您的演員system1system2,無一不是頂級演員命名actor1actor2,你可以得到ActorRefs他們喜歡:

// inside actor1 
val actor2 = system.actorFor("akka://system2/user/actor2") 
actor2 ! "Foo" 

// inside actor2 
val actor1 = system.actorFor("akka://system1/user/actor1") 
actor1 ! "bar" 
相關問題