1

特定のアクターが失敗した場合にシステムがどのように動作するかを知ることは非常に重要です。たとえば、リカバリがどのように実行されるか、スナップショットが適切にフェッチされるかなどです。驚いたことに、ドキュメントにはアドバイスが見つかりませんでした。

いくつかの例で見たアプローチは、特別なFailメッセージを用意し、アクターExceptionがこのメッセージに対して をスローできるようにすることです。

class MyActor extends Actor {
  override def receive =
    ...
    case Fail => throw new Exception("kaboom")
}

プロダクションコードとテストコードが混在していて、疑いを持たない読者に合理的なWTFが生成される可能性があるため、決して使用しないことを願っています.

任意のアクターを適切に失敗させるにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

0

少し考えた後、私は簡単な解決策を実装しました。テスト パッケージには、失敗するための特性が含まれており、失敗テストのためにアクターに混合されます。

object Failing{
  case object Fail
}

trait Failing {
  def failOnMsg: PartialFunction[Any, Unit] = {
    case Fail => throw new Exception("kaboom!")
  }
}

次に、テストでは、PF がオリジナルの先頭に追加されますreceive

val props = Props(new MyActor(arg) with Failing {
  override def receive = failOnMsg orElse super.receive
})

val actor = system.actorOf(props)
actor ! Fail

それは私が以前に持っていたものよりもまだ優れていますが、いくつかのボイラープレートをもたらします. より良い解決策があることを願っています。

于 2016-08-04T18:43:21.783 に答える