我的环境是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/