1

有没有办法重新启动演员?我正在编写一个测试来测试我的参与者系统结构中的恢复策略,但我找不到如何重新启动参与者来测试我自定义的 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]
...

但仍然收到未处理的“失败”消息

4

1 回答 1

3

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

于 2015-02-12T17:19:24.960 回答