我创建了一个Actor,它执行了一些基本操作,并且似乎工作正常-但是,我定期在日志中看到以下内容

[INFO] [05/28/2014 14:24:00.673] [application-akka.actor.default-dispatcher-5] [akka://application/deadLetters] Message [akka.actor.Status$Failure] from Actor[akka://application/user/trigger_worker_supervisor#-2119432352] to Actor[akka://application/deadLetters] 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'.


我想实际查看“失败”的内容,以确定确切地抛出Failure的内容,但是我不太清楚如何查看它们。

在阅读Akka文档时,它提到了如何禁用日志中的死信警告,但没有提到如何实际编写处理程序来处理它们。

有没有一种简单的方法可以实际捕获发送给死信的任何内容?

最佳答案

如@wingedsubmariner在评论中所述,您可以订阅主系统DeadLetter上的EventStream事件,以在发生死信时得到通知,并能够以更自定义的方式对这种情况做出反应。为了订阅,代码如下所示:

context.system.eventStream.subscribe(myListenerActorRef, classOf[DeadLetter])


然后,该侦听器参与者的接收可能类似于以下内容:

def receive = {
  case DeadLetter(msg, from, to) =>
    //Do my custom stuff here
}


DeadLetter类的结构为:

case class DeadLetter(message: Any, sender: ActorRef, recipient: ActorRef)

10-08 13:39