我想创建一个可以远程访问和本地访问的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