Монитор Akka DeadLetter не получает сообщения, отправленные необработанными ()
У меня есть следующие настройки актера:
public class Master extends AbstractActor {
protected Logger log = LoggerFactory.getLogger(this.getClass());
@Override
public Receive createReceive() {
return receiveBuilder()
.match(Init.class, init -> {
log.info("Master received an Init, creating DLW and subscribing it.");
ActorRef deadLetterWatcher = context().actorOf(Props.create(DeadLetterWatcher.class),
"DLW");
context().system().eventStream().subscribe(deadLetterWatcher, DeadLetterWatcher.class);
log.info("Master finished initializing.");
})
.matchAny(message -> {
log.info("Found a {} that Master can't handle.",
message.getClass().getName());
unhandled(message);
}).build();
}
}
public class DeadLetterWatcher extends AbstractActor {
protected Logger log = LoggerFactory.getLogger(this.getClass());
@Override
public Receive createReceive() {
return receiveBuilder()
.matchAny(message -> {
log.info("Got a dead letter!")
}).build();
}
}
При запуске Master
актер создан и отправлен Init
сообщение, и, конечно же, я вижу следующий вывод журнала:
Master received an Init, creating DLW and subscribing it.
Master finished initializing.
Однако вскоре после этого Master
отправлено Fizzbuzz
сообщение, и я вижу это в журналах:
Found a com.me.myapp.Fizzbuzz that Master can't handle.
Но тогда я не вижу DeadLetterWatcher
Журнал " Получил мертвую букву! ", который говорит мне, что у меня что-то неправильно соединено. Любые идеи, где я иду наперекосяк?
1 ответ
Пройти в akka.actor.UnhandledMessage.class
, вместо DeadLetterWatcher.class
к subscribe()
метод:
context().system().eventStream().subscribe(deadLetterWatcher, akka.actor.UnhandledMessage.class);