Акка получает мертвую букву для завершения работы - PullRequest
0 голосов
/ 08 июля 2019

У меня есть актер, который собирает произвольное количество сообщений субактора. Субакторы вызывают друг друга в следующем порядке:

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

Это дало мне идею использовать счетчик мертвых букв для моей процедуры выключения для запуска после букв Х и некоторого жестко заданного сна. Акка, по-видимому, не агрегирует после точки, указанной в журнале ниже:

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

Но это говорит мне, что есть надежный способ настроить слушателя, чтобы подсчитать, сколько генерируется мертвых букв. Каков будет лучший подход здесь?

1 Ответ

2 голосов
/ 08 июля 2019

Как указано в документации:

Как описано в Остановке актеров, сообщения ставятся в очередь, когда актер прекращается или отправляется после его смерти, перенаправляются на мертвую букву почтовый ящик, который по умолчанию будет публиковать сообщения, завернутые в DeadLetter. [...] все еще возможно подписаться на них явно:

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

...