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

}

消息未传递到收集器,代码的结果是:

[04/27/2014 18:09:05.518] [ReadScheduler-akka.actor.default-dispatcher-3] [akka://ReadScheduler/user/Collector] 来自 Actor[akka:/ 的消息 [java.lang.Boolean] /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
}

您还应该使用 acase object而不是原语来识别true.

于 2014-04-27T20:01:13.293 回答