0

我正在尝试创建一个可以远程和本地访问的演员。下面创建的演员抛出异常。任何想法?

val myLocalActor2 = system.actorOf(Props[ActorNodes], name = "akka://JtsSystem@127.0.0.1:2552/MyOwnRef")

这是以编程方式创建本地和远程参与者的最佳和唯一方法吗?

4

2 回答 2

1

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

一般来说,请阅读文档,我们已经投入了很多时间,当人们不阅读它时感觉很浪费。

于 2012-05-19T11:18:13.557 回答
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 上以编程方式执行此操作

谢谢。

下一步将是广播该信息,以便所有服务都知道每个参与者的位置......可能使用那里概述的想法:

http://blog.vasilrem.com/even-simpler-scalability-with-akka-through-re

于 2012-05-19T12:31:57.500 回答