我正在尝试创建一个可以远程和本地访问的演员。下面创建的演员抛出异常。任何想法?
val myLocalActor2 = system.actorOf(Props[ActorNodes], name =
"akka://JtsSystem@127.0.0.1:2552/MyOwnRef")
这是以编程方式创建本地和远程参与者的最佳和唯一方法吗?
我正在尝试创建一个可以远程和本地访问的演员。下面创建的演员抛出异常。任何想法?
val myLocalActor2 = system.actorOf(Props[ActorNodes], name =
"akka://JtsSystem@127.0.0.1:2552/MyOwnRef")
这是以编程方式创建本地和远程参与者的最佳和唯一方法吗?
actorOf 中的“名称”只是一个路径段。这将识别新创建的演员。有关详细信息,请参见此处: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
一般来说,请阅读文档,我们已经投入了很多时间,当人们不阅读它时感觉很浪费。
让它工作(除了全局注册表):
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 上以编程方式执行此操作
谢谢。
下一步将是广播该信息,以便所有服务都知道每个参与者的位置......可能使用那里概述的想法:
http://blog.vasilrem.com/even-simpler-scalability-with-akka-through-re