有没有办法重新启动akka演员

时间:2015-02-12 15:57:55

标签: scala akka akka-testkit

有没有办法重启演员?我正在编写测试来测试我的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]
...

但仍然没有得到“失败”的消息

1 个答案:

答案 0 :(得分:2)

除非你设置主管stratergy重启。否则,您无法使用毒丸或杀死重新启动演员。如果演员以某种方式终止而没有设置重启的管理员策略,唯一的方法是创建一个新的。