我有一个参与者,它聚合任意数量的子参与者消息。子角色按如下顺序互相调用:
system.actorSelection(s"/user/$groupId-${index + 1}*") ! Declare
这给了我一个想法,在我的关机例程中使用死信计数来触发X个字母和一些硬编码的睡眠。在给定以下日志的情况下,Akka似乎未聚合到某个点之后:
[...] was not delivered. [10] dead letters encountered, no more dead letters will be logged.[...]
但这告诉我有一种可靠的方法来设置侦听器,以计算生成的死信数量。最好的方法是什么?
答案 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