有没有办法重启akka actor
Is there a way to restart an akka actor
有没有办法重启actor?我正在编写一个测试来测试我的 actor 系统结构中的恢复策略,但我找不到如何重新启动 actor 来测试我自定义的 preRestart/postRestart 生命周期挂钩的方法。使用默认的 supervisorStrategy - OneForOne 和默认的决策者。我尝试使用 Killed 但在默认策略中被翻译为停止演员。压倒一切的策略意味着我实际上会测试与生产代码中实际 运行 不同的东西。
我是否错过了一些重要的事情,因为我认为测试的不仅仅是快乐的一天场景作为测试的一个组成部分。
感谢您的澄清
尝试了以下但未能成功:
trait FailActor extends Actor {
abstract override def receive = LoggingReceive {
fail.orElse(super.receive)
}
def fail:Receive = {
case "fail" => throw new RuntimeException("Test")
}
}
class AddressTranslatorFailActor(storage: ActorRef) extends AddressTranslatorActor(storage) with FailActor
并且在测试中通过了这个失败的参与者:
val probe = TestProbe()
val addressServiceProps = Props {
new AddressServiceActor {
override def translateAddressProps = classOf[AddressTranslatorFailActor]
}
}
其中 AddressService acctor 定义如下:
class AddressServiceActor extends Actor with ActorLogging {
def translateAddressProps: Class[_<:AddressTranslatorActor] = classOf[AddressTranslatorActor]
...
但仍然收到未处理的 "fail" 消息
除非你设置supervisor策略重启。否则,你不能用毒丸重启演员,也不能杀人。如果 actor 以某种方式终止而没有设置重启策略,唯一的方法是创建一个新的。
有没有办法重启actor?我正在编写一个测试来测试我的 actor 系统结构中的恢复策略,但我找不到如何重新启动 actor 来测试我自定义的 preRestart/postRestart 生命周期挂钩的方法。使用默认的 supervisorStrategy - OneForOne 和默认的决策者。我尝试使用 Killed 但在默认策略中被翻译为停止演员。压倒一切的策略意味着我实际上会测试与生产代码中实际 运行 不同的东西。
我是否错过了一些重要的事情,因为我认为测试的不仅仅是快乐的一天场景作为测试的一个组成部分。
感谢您的澄清
尝试了以下但未能成功:
trait FailActor extends Actor {
abstract override def receive = LoggingReceive {
fail.orElse(super.receive)
}
def fail:Receive = {
case "fail" => throw new RuntimeException("Test")
}
}
class AddressTranslatorFailActor(storage: ActorRef) extends AddressTranslatorActor(storage) with FailActor
并且在测试中通过了这个失败的参与者:
val probe = TestProbe()
val addressServiceProps = Props {
new AddressServiceActor {
override def translateAddressProps = classOf[AddressTranslatorFailActor]
}
}
其中 AddressService acctor 定义如下:
class AddressServiceActor extends Actor with ActorLogging {
def translateAddressProps: Class[_<:AddressTranslatorActor] = classOf[AddressTranslatorActor]
...
但仍然收到未处理的 "fail" 消息
除非你设置supervisor策略重启。否则,你不能用毒丸重启演员,也不能杀人。如果 actor 以某种方式终止而没有设置重启策略,唯一的方法是创建一个新的。