如何查看akka死信

Posted

技术标签:

【中文标题】如何查看akka死信【英文标题】:How to view akka dead letters 【发布时间】:2014-07-17 03:53:18 【问题描述】:

我创建了一个执行一些基本操作并且似乎工作正常的 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 的内容,以确定究竟是什么在抛出 Failure,但我不知道如何查看它们。

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

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

【问题讨论】:

见doc.akka.io/docs/akka/snapshot/scala/…。示例代码块展示了如何注册一个Actor 来接收死信。 完美,谢谢。在阅读文档时错过了这一点 - 不妨将其作为完整答案发布,我会将其标记为获胜者。 【参考方案1】:

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

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

然后,该侦听器 Actor 的接收可能如下所示:

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

DeadLetter类的结构是:

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

【讨论】:

以上是关于如何查看akka死信的主要内容,如果未能解决你的问题,请参考以下文章

Akka Scala 演员中的死信

如何删除 Azure 服务总线主题上的死信消息

查看Azure服务总线死信的申请

如何分析 Akka Java 应用程序邮箱

Spring JMS 和 ActiveMQ 在哪里查看死信队列中的消息

从逻辑应用程序设置死信原因