我正在尝试创建一个可以远程和本地访问的actor。 下面创建的actor抛出异常。有什么想法吗?
val myLocalActor2 = system.actorOf(Props[ActorNodes], name =
"akka://JtsSystem@127.0.0.1:2552/MyOwnRef")
这是以编程方式创建本地和远程的演员的唯一方式吗?
答案 0 :(得分:1)
actorOf中的“name”只是一个路径段。这将识别新创建的演员。有关详细信息,请参阅此处:http://doc.akka.io/docs/akka/2.0.1/general/addressing.html
此外,拥有本地和远程的东西没有意义,但我认为你的意思是它应该是本地的并且可以从某个远程节点访问?如果是这样,只需使用actorOf创建它,其他节点可以使用“actorFor”查找它:
val remoteActor = system.actorFor("akka://CalculatorApplication@127.0.0.1:2552/user/simpleCalculator")
在此处详细了解:http://doc.akka.io/docs/akka/2.0.1/scala/remoting.html
一般来说,请阅读文档,我们已经花了这么多时间,当人们不读它时会感到浪费。
答案 1 :(得分:0)
让它工作(除了全球注册表):
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