我对“ Akka Classic”演员进行了测试,正在测试持久性。
逻辑很简单:
我正在将其迁移到AKKA 2.6和“ AKKA Typed”,但是Kill和PoisonKill不可用。
从文档中:
Typed不支持PoisonPill。相反,如果您需要 要停止的演员,您应该定义一条消息,要求演员 理解并让它返回Behaviors.stopped,当收到 消息。
但是,使用TestKit.stop实用程序很容易重现 PoisonPill 行为。
但是杀死呢?它将引发ActorKilledException,该异常将由主管管理。如何在Akka Typed中做到这一点?
所以问题是: 如何使用“ AKKA类型的”实施此测试?
答案 0 :(得分:1)
为了保护stopping actors,在导入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
。