3

私の環境は、eclipse、play、akka、scala です。リモート マスター akka アクターを作成しようとすると、エラーが発生します。

このエラーが発生する理由がわかりません:

[InvalidActorNameException: アクター名 hello が一意ではありません!]

ユーザーがフォームを送信すると、次のようにcalculate呼び出されます。

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

アクターを作成するコードは次のとおりです

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

masterまた、このアクターのインスタンスを 1 つだけ作成し、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))
    }
}

アクターシステムは次のとおりです。

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
    }
}
4

1 に答える 1

4

次のコードでは、「Worker」という同じ名前のワーカーを多数作成しているようです。

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

アクター作成コードを移動する必要があります (このドキュメントを参照):

class Master extends Actor {
    val worker = RemoteSystem.system.actorOf(Props[Worker], "Worker")
    ...
}
于 2012-07-27T21:06:27.943 に答える