Akka Scala 演员中的死信
Posted
技术标签:
【中文标题】Akka Scala 演员中的死信【英文标题】:Dead-letter in Akka Scala actors 【发布时间】:2014-06-13 04:59:10 【问题描述】:我有一个非常简单的结构,基于 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
消息没有被传递到收集器,代码的结果是:
[2014 年 4 月 27 日 18:09:05.518] [ReadScheduler-akka.actor.default-dispatcher-3] [akka://ReadScheduler/user/Collector] 消息 [java.lang.Boolean] 来自 Actor[akka://ReadScheduler/user/Executor#2127791644] 到 演员[akka://ReadScheduler/user/Collector#337715308] 不是 发表。 [1] 遇到死信。这个日志记录可以转 关闭或使用配置设置“akka.log-dead-letters”进行调整 和'akka.log-dead-letters-during-shutdown'。
邮件发送失败的原因是什么?我在这个概念中有什么一直遗漏的地方吗?
【问题讨论】:
【参考方案1】:您应该使用层次结构 - 将 Collector
作为 ExecutorMaster
的子级启动。
您在receive
方法中所做的是尝试创建一个与在ExecutorMaster
收到第一条消息之后创建的另一个同名的actor。
考虑使用:
val collector = context.actorOf(Props[Collector], name = "Collector")
def receive =
case _ => collector ! true
您还应该使用case object
而不是原语来识别true
的含义。
【讨论】:
以上是关于Akka Scala 演员中的死信的主要内容,如果未能解决你的问题,请参考以下文章