Монитор 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);
Другие вопросы по тегам