Akka收到停机例程的死信计数

时间:2019-07-08 06:22:54

标签: akka

我有一个参与者,它聚合任意数量的子参与者消息。子角色按如下顺序互相调用:

system.actorSelection(s"/user/$groupId-${index + 1}*") ! Declare

这给了我一个想法,在我的关机例程中使用死信计数来触发X个字母和一些硬编码的睡眠。在给定以下日志的情况下,Akka似乎未聚合到某个点之后:

[...] was not delivered. [10] dead letters encountered, no more dead letters will be logged.[...]

但这告诉我有一种可靠的方法来设置侦听器,以计算生成的死信数量。最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

如文档中所述:

  

如“停止参与者”中所述,消息在参与者发生排队时   终止或在其死亡后发送,将其重新发送至该死信   邮箱,默认情况下将发布包装在其中的邮件   死信[...]仍然可以明确地订阅它们:

import akka.actor.AllDeadLetters
system.eventStream.subscribe(listener, classOf[AllDeadLetters])

侦听器是一个演员,可以通过其行为(DeadLetter方法)接收receive作为消息

def receive = {
    case d: DeadLetter => println(d) // You can implement your count here
  }

更多信息:https://doc.akka.io/docs/akka/current/event-bus.html#dead-letters