私は2人の俳優があります。システム内のいくつかのプロセスを処理Akka:他の(子供以外の)俳優の中のある俳優の失敗をどうやって捉えることができますか?
ProcessManager(例えば、ユーザ登録、購入、など)
通知 - いくつかのエラーがProcessManagerで発生した場合、ユーザーに通知する必要がありますが。 ProcessManagerアクターの失敗を捕捉する必要があります(たとえば、ActorInitializationExceptionや最大再起動時間に達し、プロセスマネージャーのアクターが停止したなど、何らかの理由で失敗して停止しました)。
class ProcessManager extends Actor {
override def receive: Receive = {
...
}
}
class Notifier extends Actor {
override def receive: Receive = {
PROCESS MANAGER ACTOR FAILED AND STOPPED =>
// Here I need to catch failure of ProcessManager actor
// (it was failed and stopped for what ever
// reason, for example, because of ActorInitializationException
// or max restart time reached and Process manager actor was stopped).
//
// Then do some stuff, for example, send message to the client via web socket.
}
}
class MyController @Inject() (cc: ControllerComponents, actorSystem: ActorSystem)
(implicit exec: ExecutionContext) extends AbstractController(cc) {
// I need to catch failure of processManager in this actor.
val notifier = actorSystem.actorOf(Props(classOf[Notifier]))
def registerUser = Action.async {
// Actor may be stopped because of ActorInitializationException here
val processManager = actorSystem.actorOf(Props(classOf[ProcessManager]))
...
// OR it may be stopped here for any reason.
processManager ! "some message which will fail and stop pm actor"
Future.successfull(Ok("Thanks."))
}
}
にはどうすれば通知俳優の内側ProcessManager俳優の(障害のために)終了をキャッチすることができますか?
EDIT 私の問題の背景を説明しましょう。
私はPlayコントローラでPMアクタを作成し、それにメッセージを送信して(Tell)、すぐにユーザにOk応答を返します。 PMアクターが別の子アクターを作成し、作成中にActorInitializationExceptionがスローされます。私はNotifierアクタを使用して(Webソケット経由で)ユーザに通知する必要があります。
私の問題の文脈を説明させてください。私はPlayのコントローラーにPMの俳優を作り、それにメッセージを送る(Tell)、そしてすぐにユーザーにOk応答を返します。 PMアクターが別の子アクターを作成し、作成中にActorInitializationExceptionがスローされます。私はNotifierアクタを使用して(Webソケット経由で)ユーザに通知する必要があります。このソリューションはこの問題を解決しませんが、ありがとうございます。 – Teimuraz
@moreo:更新されました。 – chunjef