我完成了Coursera Reactive Programming Class的第一个Akka作业(第五周 - 二叉树)。
我的问题是关于Akka本身。
我的应用程序运行正常,但我注意到很多非致命的死信警告。这是一个:
[INFO] [01/16/2014 15:09:41.668] [PostponeSpec-akka.actor.default-dispatcher-23] [akka://PostponeSpec/user/$c/$b/$a/$b/$a/$a/$b/$b/$a/$a] Message [akka.dispatch.sysmsg.Terminate] from Actor[akka://PostponeSpec/user/$c/$b/$a/$b/$a/$a/$b/$b/$a/$a#570299303] to Actor[akka://PostponeSpec/user/$c/$b/$a/$b/$a/$a/$b/$b/$a/$a#570299303] was not delivered. [2] 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'.
我注意到其他人已经问过这个,官方的答案是这不是问题,只是通过更新日志记录设置可以忽略和隐藏的详细信息。
我理解忽略这一点的建议,但它似乎仍然是Akka的一个草率的缺陷。在这个简单的学习练习中,我确信我的演员在他们开始正常关闭后永远不会收到消息。在这些理想化的情况下,Akka不应该在死信队列中放任何东西。这些死信的理由是什么?我也看到死信消息不是我的应用程序明确发送的消息,而是内部消息。
答案 0 :(得分:1)
作为参加课程的人,并在课程提要中提出问题,我记得以下内容:儿童演员可能决定自行停止,但其父母可能会决定做同样的事情。在这一点上,父母的终止和终止(子)消息的传递之间存在固有的竞争条件,如果父母在接收消息之前设法停止它自己将以死信结束队列中。