我有兩個類與不同的ActorSystem與他們相應的actor。 class1中的actor如何向class2中的actor發送消息?我該如何向不同班級的演員發送消息?
回答
我不太確定你在問什麼。
如果演員類是MyClass
和消息對象爲Message
,你只是做
val myInstance = new MyClass()
myInstance ! Message
就是這樣。你可以從任何其他演員中調用它。
這個defintely將無法在阿卡工作 – sourcedelica
爲什麼你有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.actorFor
或context.actorFor
,你可以檢索給定路徑的ActorRef
。用戶創建的演員的路徑始終始於/user
幷包含所有父演員。所以如果你有3名演員的層次結構,路徑可能是/user/actorA/actorB/actorC
。
另外,如果真的需要2個ActorSystems,Akka Remoting是你如何連接它們。 –
你的意思是這是首選的解決方案,或者這是唯一的方法嗎? (請參閱我的回答) – sourcedelica
請參閱docs on Actor Paths。演員路徑包括演員系統。
因此,舉例來說,如果你的演員系統被命名爲您的演員system1
和system2
,無一不是頂級演員命名actor1
和actor2
,你可以得到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"
- 1. 我要發送第二消息,演員爲新的消息
- 2. 演員消息的同步
- 3. 發送消息從一個演員到另一個演員
- 4. 向ActorSystem中的所有演員發送消息
- 5. 發送同樣的消息到演員的名單
- 6. 如何避免發送消息給未創建的演員?
- 7. 如何發送RabbitMQ消息給Pykka演員?
- 8. 我是否應該只使用現代Akka從演員內部發送演員消息?
- 9. 玩! Scala和Akka:如何測試演員A是否向演員B發送了消息?
- 10. 向觀看特定演員的演員廣播消息?
- 11. akka是否自發地向自定義演員發送自己的消息?
- 12. 檢查演員的終止和避免發送消息到演員
- 13. 演員到消息
- 14. 在阿卡,我可以欺騙從不同演員的消息?
- 15. 我如何發送消息?
- 16. 如何測試不向發送者發送任何東西的演員
- 17. 我如何在班級中調用不同的班級?
- 18. 如何發送消息一級Unity3d C#
- 19. 演員同時處理多條消息
- 20. 我的班級如何知道其他班級不應該如何?
- 21. 如何向班級的所有網站成員發送電子郵件?
- 22. 如何從stdin獲取演員消息?
- 23. 我如何發送WAP推送消息?
- 24. 從一個班級獲取意向演員
- 25. 斯卡拉演員發送消息超類
- 26. Scala:發送/處理鍵入消息到/與演員
- 27. Akka.NET:無法發送列表消息給其他演員系統
- 28. Akka.Remote - 解開後無法將消息發送給遠程演員
- 29. 阿卡:發送將來消息給演員
- 30. 如何從cmd向stderr發送消息?
它們在相同的JVM還是不同的JVM中? – sourcedelica