gpt4 book ai didi

scala - Akka Scala Actor 中的死信

转载 作者:行者123 更新时间:2023-12-04 12:51:01 25 4
gpt4 key购买 nike

我有一个基于 Scala 中的 Akka actor 的非常简单的结构,但是我不断收到有关未传递消息的警告。这是主类的代码,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] Message [java.lang.Boolean] from Actor[akka://ReadScheduler/user/Executor#2127791644] to Actor[akka://ReadScheduler/user/Collector#337715308] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.



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

最佳答案

您应该使用层次结构 - 启动 Collector作为 ExecutorMaster 的 child .

你在receive里面做什么方法正在尝试创建一个与在 ExecutorMaster 的第一条消息之后创建的另一个同名的 Actor 。收到。

考虑使用:

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

您还应该使用 case object而不是识别 true 含义的原语.

关于scala - Akka Scala Actor 中的死信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23327675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com