Передайте akka.actor.UnhandledMessage.class
вместо DeadLetterWatcher.class
методу subscribe()
:
context().system().eventStream().subscribe(deadLetterWatcher, akka.actor.UnhandledMessage.class);
Обратите внимание, что необработанные сообщения - это не то же самое, что мертвые буквы.В первом случае актер «должен предоставить сопоставление с образцом для всех сообщений, которые он может принять, и если вы хотите обрабатывать неизвестные сообщения, вам необходимо иметь регистр по умолчанию».Ваш Master
актер обрабатывает только Init
сообщений;все остальные полученные сообщения считаются «необработанными» и инициируют публикацию akka.actor.UnhandledMessage
в EventStream
.Вы явно вызываете метод unhandled
для сообщений, не являющихся Init
, но unhandled
будет вызываться по умолчанию , если у вас нет запасного предложения case
.Также обратите внимание, что вы можете регистрировать необработанные сообщения через конфигурацию, без необходимости «субъекта-монитора»:
akka {
actor {
debug {
# enable DEBUG logging of unhandled messages
unhandled = on
}
}
}
Мертвые буквы , с другой стороныявляются сообщениями, которые не могут быть доставлены, например сообщениями, отправленными остановленному субъекту, и они также инициируют публикацию сообщений в EventStream
.
, поскольку необработанные сообщения отличаютсяиз мертвых букв ваш DeadLetterWatcher
назван неправильно и, вероятно, должен быть назван примерно как UnhandledMessageWatcher
.При этом, если ваша цель состоит только в том, чтобы регистрировать необработанные сообщения, то самый простой подход - сделать это с конфигурацией регистрации, упомянутой выше.