問題タブ [akka-supervision]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Akka アクター/スーパーバイザーの階層を決定する方法は?
私はAkka(Java lib、v2.3.9)を初めて使用しています。スーパーバイザー階層のベスト プラクティスに従おうとしていますが、これが初めての Akka アプリであるため、どこかで精神的な障壁にぶつかっています。
私の初めての Akka アプリ (実際には、複数のアプリ間での再利用を目的としたライブラリ) では、外界からの入力はProcess
、アクターに渡されるメッセージとして現れます。Process
私のアプリを使用する開発者は、最終的にどのアクターがインスタンスを送信し、どのアクターが送信しないかを構成するテキストベースの構成ファイルを提供します。つまり、これらが私のアクター クラスであるとします。
構成ファイルでわかるように、メッセージを受信するためにStormTrooper
とのみEmperor
が選択されました。Process
これにより、最終的にゼロ (0)DarthVader
アクターが作成されます。また、これにより、次のように取り込まれSet<ActorRef>
たアプリケーションで利用できるようになることも私の意図です。StormTrooper
Emperor
UntypedActor
したがって、(願わくば) ご覧のとおり、メッセージを処理するこれらすべてのアクター (実際には何十ものimpl) があります (次に、何らかのソースからProcess
取得します)。Input
これらのProcess
メッセージを処理するためにどのアクターが生きている/オンラインであるかについては、完全に構成主導型です。最後に、アプリInput
が.Process
Process
これが与えられたバックストーリー/セットアップであるため、「アクター/スーパーバイザーの階層」がどうあるべきかを特定できません。私のユースケースでは、すべてのアクターは真に平等であり、アクター間に監視構造はないようです。そのタイプのアクターが存在するように構成されている場合、StormTrooper
単にメッセージを受け取ります。Process
他のアクター サブクラスについても同様です。
ここで何かが完全に欠けていますか?すべてのアクターが等しく、階層が本質的に「フラット」/水平である場合、(フォールト トレランスの目的で) 監視階層を定義するにはどうすればよいですか?
scala - Akka で RouterPool のすべての子の ActorRefs を取得する方法
次のようなアクターの RouterPool を作成します。
今度は、このルーターによって管理されている 5 つの子の ActorRef オブジェクトにアクセスしたいと思います。すべての子に対してそれを取得するためのメソッド呼び出しはありますか? または、それらを明示的に宣言してからルーターに渡す必要がありますか?
akka - ActorRef をコンストラクター引数として渡す
私は Akka を初めて使用し、多くのリモート ノードを持つクラスター システムを構築しています。リモート ノードはワーカーと呼ばれます。ワーカーは、リモート ルーターのチェーンを作成します。
ルーターを作成する親 (ワーカー) には、ルーターのすべてのルートからメッセージを取得する統計ウォッチャーがあります。
qn is : Is は、ルーターのコンストラクター引数としてルーターを作成するときに statswatcher actorRef を渡すか、単に statswatcher のアクター パスをコンストラクター引数として渡し、メッセージを伝えるためにルーターでユーザー アクターの選択を渡すことをお勧めします。
**************** アップデート ********
akka メーリング グループからの返信によると、アクター ref をコンストラクター引数として渡すことは悪い習慣ではありません。アクター選択は、リモート アクター ルックアップに役立ちます。
akka - さまざまなタイプのアクターに対する Akka スーパーバイザー戦略
私は Akka を使用しており、ユーザー ガーディアン アクターの独自の監督戦略を定義したいと考えています。TaskActor と MessageActor という 2 種類のアクターを定義しました。それらはトップレベルのアクターとしてインスタンス化されます。ユーザー ガーディアンに次の監視戦略を適用してほしいと思います: TaskActor を停止し、MessageActor が例外をスローしたときに再開します (スローされる例外の特定のタイプは気にしません)。どうすればいいですか?
scala - アクターの再起動後にスーパーバイザーからアクターにメッセージを送信する方法は?
要件?
- 永久に実行する長時間実行プロセス (デーモン) が必要です
- 例外が発生した場合は再起動する必要がありますが、再度 2 回失敗した場合は再起動する必要はありません
私が直面している問題?
- アクターは再起動されますが、メッセージは再送信されません
私は何を持っていますか?
メインクラス
スーパーバイザー
俳優
実働
ログ
更新
に委任しないとFuture
、再起動してもすべてが期待どおりに機能しますが、に委任するとFuture
、Future
アクターの場合に実行されませんrestart
。こちらをご覧ください
akka - フォールバックする Akka と Supervisor の戦略
私は Akka を初めて使用しますが、ディレクティブについての私の理解では、子が永久にサービスを停止していると見なされるべきときに内部で使用されますが、完全な停止を処理する方法があります。Stop
SupervisorStrategies
その理解が正しければ、私がやりたいことは、通常/プライマリの子が停止され、その時点からフォールバックとして使用された後に従事する必要がある、ある種の「バックアップ アクター」を持つことです。たとえば、Notifier
電子メールを送信する子アクターを持つ親アクターがいるとします。Notifier
が本当に停止した場合(たとえば、基盤となるメール サーバーがオフラインになった場合)、このアクターへのバックアップは別のアクター (たとえば、 ) である可能性があります。このアクターQueueClient
は通知要求をメッセージ ブローカーに送信し、そこでメッセージはキューに入れられ、後で再生されます。時間。
SupervisorStrategy
内部にフォールト トレランス/アクター バックアップが組み込まれているように定義するにはどうすればよいですか? コード例を見せてください。それが私が学ぶ唯一の方法です!
java - Akka で最上位のスーパーバイザーをエスカレートする方法は?
次のトップレベル (「最も親」) なアクターがあります。
ご覧のとおり、3 つの子を監視し、それら 3 つの子が「回復可能な」例外をスローすると、それらは停止され、バックアップに置き換えられます。ここまでは順調ですね。
私が今直面している問題は、バックアップ アクターがスロー可能なものをスローした場合、このMaster
アクター (そして実際には、私のアプリ全般) が入力の処理を続行できない状態にあると見なし、エスカレートすることです。保護者レベルの例外。
私は Akka を初めて使用するので、このコードをどこに配置すればよいか、どのように見えるべきかわかりません。繰り返しますが、次のようなロジックが必要です。
Master
バックアップ アクターがスロー可能なものをスローした場合、例外をの親にエスカレートします。これは、実際には Akka “<a href="http://doc.akka.io/docs/akka/snapshot/general/supervision.html " rel="nofollow">guardian" アクター/コンストラクト
これの最初の部分は、例外がバックアップからいつスローされるかを知る必要があるということです。この部分は処理できるので、戦略が次のようになったとしましょう。
しかし、ご覧のとおり、「アクター システムから」エスカレーションを実装するのにまだ苦労しています。アイデア?Scala は私には象形文字のように見えるので、Java コードの例が非常に好まれます。