当前位置: 首页 > 知识库问答 >
问题:

Akka Scala演员的死信

乐山
2023-03-14
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]从参与者[Akka://ReadScheduler/User/Executor#2127791644]到参与者[Akka://ReadScheduler/User/Collector#337715308]的消息[java.lang.Boolean]未传递。[1]遇到的一纸空文。可以通过配置设置'Akka.log-dead-letters'和'Akka.log-dead-letters-dhider-shutdown'关闭或调整此日志记录。

消息传递不成功的原因是什么?在这个概念中有什么我一直遗漏的吗?

共有1个答案

徐瑞
2023-03-14

您应该使用层次结构-启动收集器作为ExecutorMaster的子级。

receive方法中所做的是尝试创建一个与ExecutorMaster收到第一条消息后创建的另一个角色同名的角色。

考虑使用:

val collector = context.actorOf(Props[Collector], name = "Collector")
def receive = {
    case _ => collector ! true
}
 类似资料:
  • 我想知道如何有效地清理在飞行中创建的akka演员。 要提供一点背景信息: 每个事件创建的演员层次结构。 主管- 在我的应用程序中,主管参与者动态创建其他参与者(在定期事件上)。我想在该事件的处理步骤完成后清理参与者。 所以,一旦处理完成,我想杀死所有的儿童演员。 我在成功完成后以与创建相反的方式传播消息(successfulProcessing)。(1)- 这是主管演员的代码。 这是清理动态创建的

  • 我从这里得到上面的错误消息: 特别是从第二行。。进口是 akka版本是2.2.1,scala是2.10.2,我正在使用sbt 0.13来构建它。 编辑:我用 结果如下:

  • 我希望有几个参与者(它们表示基于Akka IO部分的TCP连接)。这些参与者应更新通用模型(内存中)。此模型保存在管理此模型的其他参与者中。 我的问题是,我如何设置这个结构?有没有办法告诉akka某个演员只有一个实例? 另一种选择是:我已经有了一个actor,它接受新的TCP/IP连接并将它们传递给新的actor。现在我可以在连接接收器中创建这个“模型管理器角色”,并将这个角色传递给新创建的每个连

  • 我正在尝试使用ask模式向远程参与者发送请求。本地actor接收一些值,并对其执行一些任务并更新它。然后,当本地参与者试图将更新后的值发送回远程参与者时,在发送时发生错误。我应该如何处理这个错误? 错误:[INFO][03/31/2017 17:28:18.383][ClientSystem-Akka.actor.Default-Dispatcher-3][Akka://ClientSystem/

  • 我经常发现自己使用一个“主”角色,为子任务创建许多子角色。当子任务完成时,主角也应该停止自己。所以当时,我观察子角色并停止主角色context.children.is。 我经常使用这种模式,但因为我从未读过这方面的文章。我不确定,这是一个好主意还是失败的演员有问题。。。? 我已经读过Akka 2中的关机模式,但是这种方法在Java中似乎比我的解决方案更复杂? 以下是我针对具有两个子任务的主要参与者