我想創建一個可以遠程訪問和本地訪問的actor。 下面創建的actor會引發異常。任何想法?Akka演員創作問題
val myLocalActor2 = system.actorOf(Props[ActorNodes], name = "akka://[email protected]:2552/MyOwnRef")
這是通過編程創建的本地和遠程的最佳和唯一的方式和演員?
我想創建一個可以遠程訪問和本地訪問的actor。 下面創建的actor會引發異常。任何想法?Akka演員創作問題
val myLocalActor2 = system.actorOf(Props[ActorNodes], name = "akka://[email protected]:2552/MyOwnRef")
這是通過編程創建的本地和遠程的最佳和唯一的方式和演員?
actorOf中的「名稱」只是一個路徑段。這將確定新創建的演員。在這裏看到更多的信息:http://doc.akka.io/docs/akka/2.0.1/general/addressing.html
此外,有東西是本地和遠程都沒有意義,但我認爲你的意思是它應該是本地的,並可以從一些遠程節點訪問?如果是這樣,只是actorOf創建它,其他節點可以查找它使用「actorFor」:
val remoteActor = system.actorFor("akka://[email protected]:2552/user/simpleCalculator")
瞭解更多關於在這裏:http://doc.akka.io/docs/akka/2.0.1/scala/remoting.html
在一般情況下,請閱讀文檔,我們已經倒了好幾個小時,當人們不讀它時感覺很浪費。
得到它的工作(除了全球註冊表):
case class ActorMsg(val msg: String)
sealed class ActorNodes extends Actor {
override def receive = {
case ActorMsg(msg) => println("Actor Msg " + msg)
case _ => println("Everything else")
}
}
object JtsListener extends App {
val sys = "JtsSystem"
val system = ActorSystem(sys)
// println("System: " + system.settings)
val myLocalActor1 = system.actorOf(Props[ActorNodes], "MyLocalRef")
println("MyLocalActor 1: " + myLocalActor1 + " has path " + myLocalActor1.path)
myLocalActor1 ! new ActorMsg("Hello")
val myLocalActor2 = system.actorFor("akka://"+sys+"@127.0.0.1:2552/user/MyLocalRef");
println("MyLocalActor 2: " + myLocalActor2 + " has path " + myLocalActor2.path)
myLocalActor2 ! new ActorMsg("Hello Again")
}
與application.conf(我在看的ActorSystem編程這樣
THX
下一步將是廣播該信息,以便所有服務都知道每個演員的位置..可能使用這裏概述的想法:
http://blog.vasilrem.com/even-simpler-scalability-with-akka-through-re
嗨維克托,我的確的意思是,「本地創建」,但遠程和本地透明可用。因此,我想給演員一個特定的路徑創建一個本地創建,以便我可以遠程查看它。所以的確問題是如何使用actorOf爲我的本地演員分配一個路徑?這個想法也是廣播這些信息,以便遠程客戶端需要明確知道遠程節點的位置,但他們可以在某種全局註冊表中查找它? (順便說一句,我閱讀文檔) – jts
要有一個全球性的註冊表,你需要達成共識,爲了達成共識,你需要某種形式的集羣。我們目前正在爲Akka實施集羣解決方案,但現在您需要通過其他一些共識來解決這個問題。 –
好的。謝謝。我想我會使用某種使用jGroups的廣播。 – jts