测试AKKA 2.6类型的持久性参与者(Kill和PoisonPill的替代品)

时间:2019-11-08 20:09:46

标签: akka akka-persistence akka-typed

我对“ Akka Classic”演员进行了测试,正在测试持久性。

逻辑很简单:

  1. 创建一个演员并发送一堆事件。
  2. 根据测试使用akka.actor.Kill或akka.actor.PoisonKill停止演员。
  3. 再次启动actor并测试它是否已正确恢复。

我正在将其迁移到AKKA 2.6和“ AKKA Typed”,但是Kill和PoisonKill不可用。

从文档中:

  

Typed不支持PoisonPill。相反,如果您需要   要停止的演员,您应该定义一条消息,要求演员   理解并让它返回Behaviors.stopped,当收到   消息。

但是,使用TestKit.stop实用程序很容易重现 PoisonPill 行为。

但是杀死呢?它将引发ActorKilledException,该异常将由主管管理。如何在Akka Typed中做到这一点?

所以问题是: 如何使用“ AKKA类型的”实施此测试?

1 个答案:

答案 0 :(得分:1)

为了保护stopping actors,在导入ActorReftoClassic可以使用akka.actor.typed.scaladsl.adapter._并发送信号akka.actor.typed.internal.PoisonPill

在定义receiveSignal并记录所有信号时,药丸将完成预期的工作,并且演员将停止。

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

在我的情况下,先记录PoisonPill,然后记录PostStop