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 アクターは次のように定義されます。

class AddressServiceActor extends Actor with ActorLogging {

  def translateAddressProps: Class[_<:AddressTranslatorActor] = classOf[AddressTranslatorActor]
...

しかし、まだ「失敗」メッセージが処理されていません

4

1 に答える 1

3

スーパーバイザ戦略を再起動するように設定しない限り。そうしないと、ポイズン ピルまたはキルでアクターを再起動できません。スーパーバイザー ストラテジーを再起動するように設定せずにアクターが何らかの理由で終了した場合、唯一の方法は新しいアクターを作成することです。

于 2015-02-12T17:19:24.960 に答える