2011-08-05 15 views
3

私はキューからジョブを供給されているワーカー・アクターのグループがある典型的な状況です。労働者の失敗は、過渡的でも環境によるものでも、永続的なものでも、無効な仕事によるものでもよい。一時的なアクタの失敗に対する再試行の実装方法

作業者の俳優の中で私は永続的な失敗のケースを処理していますが、一時的なケースの再試行はどのように実装できますか?スーパーバイザでは、アクターを再起動させることができます。これは作業状態に戻して再設定することが望ましいですが、失敗したときにどのように作業していたメッセージを再試行できますか?

ありがとうございます!

答えて

1

Commandパターンを実装する必要があります。コマンドは、実行する操作をその引数と共にカプセル化し、アクタとは独立して存在するオブジェクトです。再試行可能な方法でアクタが失敗すると、スーパーバイザはコマンドをアクタに再送信します。アクタにストリームが供給され、メッセージを処理する場合、アクタは適切な場所で再起動できるように、コマンドのリストを作成し、完了を記録する必要があります。ストリームが巻き戻し不可能な場合、開始する前にすべてのコマンドをキューに入れなければならず、アクターは各コマンドに完了ステータスを記録しなければならないため、一時的な障害でチェーンを再送信することができます。

コマンドパターンを使用して、ヒストリと取り消しを実装することもできます。

+0

私は正しい軌道に乗っています。私はすでにコマンドオブジェクト(メッセージ)を持っています。私は監督者の仕事の仕方を掘り下げて考える必要があると思う。私は、処理中のコマンドへの参照を保持できるように、1人のスーパーバイザが1人必要ですと推測しています。ありがとう! – spieden

1

Akka 1.2またはmasterを使用している場合は、preRestartを無効にして、アクターがクラッシュしたときのメッセージを取得できます。

関連する問題