阿卡演员创作问题

时间:2012-05-18 23:04:42

标签: akka

我正在尝试创建一个可以远程和本地访问的actor。 下面创建的actor抛出异常。有什么想法吗?

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

这是以编程方式创建本地和远程的演员的唯一方式吗?

2 个答案:

答案 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