scala - Actor 名称不唯一 InvalidActorNameException

标签 scala playframework actor akka remote-actors

我的环境是eclipse、play、akka、scala。尝试创建远程主 akka actor 时出现错误。

我不确定为什么会收到此错误:

[InvalidActorNameException: actor name hello is not unique!]

当用户提交表单时,calculate被称为:

options => {
     this.calculate(options.numWorkers.toInt, options.numElements.toInt,          options.numMessages.toInt) 
     //Redirect(routes.Application.)
     Ok(html.form(this.optionsForm))
}

这是我创建 Actor 的代码

val master = RemoteSystem.system.actorOf(Props[Master], "hello")

我也只创建了这个 actor 的一个实例,并尝试了许多其他名称,例如 master , Master , 和 master1983274612987346198356 .

Master定义为:

class Master extends Actor {

    var pi: Double = _
    var nrOfResults: Int = _
    var start: Long = _

    def receive = {
        case calculate(numWorkers, numElements, numMessages) =>{
            for (i <- 0 until numWorkers) {
                val worker = RemoteSystem.system.actorOf(Props[Worker], "Worker")
                for(j <- 0 until numMessages) 
                {
                    worker ! Work(0, numElements)      
                }
            }
        }
        case PiResult(start, numTerms, acc) => println("Pi Result: " + acc)
    }

    override def preStart() {
        start = System.currentTimeMillis
    }

    override def postStop() {
        println(
"\n\tCalculation time: \t%s millis".format(System.currentTimeMillis - start))
    }
}

Actor 系统是:

object RemoteSystem {
    val system = ActorSystem(
"RemoteCreation", ConfigFactory.load.getConfig("remotecreation"))
}

在哪里remotecreation定义为:

remotecreation{
    include "common"

    akka {
        actor{
            deployment{
                /Worker{
                    remote="akka://Pi@10.0.100.254:2552"
                }
            }
        }
    remote.netty.port = 2554
    }
}

最佳答案

在下面的代码中,您似乎正在创建许多同名“Worker”的 worker :

for (i <- 0 until numWorkers) {
      val worker = RemoteSystem.system.actorOf(Props[Worker], "Worker")
      for(j <- 0 until numMessages) 
      {
         worker ! Work(0, numElements)      
      }
}

您需要移动 actor 创建代码(参见 doc ):

class Master extends Actor {
    val worker = RemoteSystem.system.actorOf(Props[Worker], "Worker")
    ...
}

关于scala - Actor 名称不唯一 InvalidActorNameException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11693562/

相关文章:

c# - 奥尔良无国籍 worker

scala - scala中从Int到Double的隐式转换不起作用

playframework - 游戏安全 2.0

java - akka eventbus - 消息保证 - 发布到总线保证

Plat Framework 1.2.7 升级到 1.5.2 后出现 MySQLIntegrityConstraintViolationException

json - 使用 play.api.libs.json 将对象序列化为 json

swift - 从其共享实例访问全局参与者属性

scala json4s,无法转换LocalDate

scala - sbt:如何编写仅在测试失败时才运行 testQuick 的任务?

html - HTML 模板中的 playframework JsValue