Тестирование персистентности AKKA 2.6 набрано (альтернативы Kill и PoisonPill) - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть тест на актера "Akka Classic", который тестирует персистентность.

Логика проста:

  1. Создать актера и отправить кучу событий.
  2. Остановите актера с помощью akka.actor.Kill или akka.actor.PoisonKill в зависимости от теста.
  3. Снова запустите актера и проверьте правильность его восстановления.

Я перевожу его на AKKA 2.6 и «AKKA Typed», но Kill и PoisonKill недоступны.

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

PoisonPill не поддерживаетсяв печатном виде. Вместо этого, если вам нужно попросить актера остановиться, вы должны определить сообщение, которое он понимает, и позволить ему возвращать Behaviors.stopped при получении этого сообщения.

Но PoisonPill поведение легко воспроизвести с помощью утилиты TestKit.stop.

Но как насчет Kill ? Он генерирует исключение ActorKilledException, которое будет управляться супервизором. Как это сделать в Akka Typed?

Итак, вопрос: Как реализовать этот тест с помощью "AKKA Typed"?

1 Ответ

0 голосов
/ 10 ноября 2019

в отношении остановки актеров , ActorRef может использовать toClassic при импорте akka.actor.typed.scaladsl.adapter._ и отправлять сигнал akka.actor.typed.internal.PoisonPill.

Когда определяют receiveSignal ирегистрируя все сигналы, таблетка выполняет ожидаемую работу, и ваш актер останавливается.

.receiveSignal {
    case (ctx, signal) =>
        ctx.log.debug("{}", signal)
        Behaviors.stopped
}

сначала PoisonPill, затем PostStop было зарегистрировано в моем случае.

...