4

私は Scala の Akka アクターに基づいた非常に単純な構造を持っていますが、未配信のメッセージに関する警告を受け取り続けています。これはメイン クラスのコードです。Collector は Actor を拡張する別のクラスです。

object Executor extends App {

  class ExecutorMaster extends Actor {

    def receive() = {
      case _ => Executor.actorSystem.actorOf(Props[Collector], name = "Collector") ! true
    }

  }

  val actorSystem = ActorSystem("ReadScheduler")
  private val app = actorSystem.actorOf(Props[ExecutorMaster], name = "Executor")

  app ! true

}

メッセージは Collector に配信されていません。コードの結果は次のとおりです。

[04/27/2014 18:09:05.518] [ReadScheduler-akka.actor.default-dispatcher-3] [akka://ReadScheduler/user/Collector] アクターからのメッセージ [java.lang.Boolean] [akka:/ /ReadScheduler/user/Executor#2127791644] が Actor[akka://ReadScheduler/user/Collector#337715308] に配信されませんでした。[1] デッドレターが発生しました。このロギングは、構成設定 'akka.log-dead-letters' および 'akka.log-dead-letters-during-shutdown' でオフにするか、調整することができます。

このメッセージの配信に失敗した理由は何ですか? コンセプトに欠けているものはありますか?

4

1 に答える 1

3

Collectorの子として階層を起動する必要がありますExecutorMaster

メソッド内で行っていることは、 が受信receiveした最初のメッセージの後に作成される別のアクターと同じ名前を持つアクターを作成しようとすることExecutorMasterです。

以下の使用を検討してください。

val collector = context.actorOf(Props[Collector], name = "Collector")
def receive = {
    case _ => collector ! true
}

case objectまた、 の意味を識別するために、プリミティブではなく aを使用する必要がありtrueます。

于 2014-04-27T20:01:13.293 に答える