問題タブ [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.
scala - AskTimeOutException の監視戦略はどうあるべきか
私は akka で監視を初めて使用します。ask タイムアウト例外が発生したときにどの監視戦略が適切かを知りたいのですが、より適切な再起動または再開はサンプル コードです。
私を案内してください、ありがとう
java - Akka: Java を使用して登録されていないカスタム akka 監視戦略
Akka
ライフ サイクルとアクターAkka
の監督戦略について説明します。public SupervisorStrategy supervisorStrategy()
akka のライフサイクルとその回復戦略を調査するために、独自の例外とオーバーライド メソッドを作成しています。以下は私のコードです:
receive()
ログをスローするメソッドではEsclateException
、アクターを終了せずに続行します。しかし、例外コードを に置き換えるとthrow new Error()
、アクターは作業を停止して終了します。出力から、私のSupervisorStrategy
登録されていないアクターはデフォルトで実行されているようですSupervisorStrategy
。ストラテジーを登録するにはどうすればよいですか?
以下は私の呼び出しコードです:
java - Akka-Java: パイプ パターンを使用して親で Future メッセージを受信できません
1 つの親に対して 1 つの子アクターを作成しています。私の子アクターはいくつかのビジネス ロジックを実行し、値を scala Future に返します。親にメッセージを送信Future
すると、将来のメッセージをキャッチできません。以下は私のコードです:
子役
親アクター
ログ
アップデート
将来の代わりに親に送信しようとしていますtell
が、それでも親はメッセージを受け取りません。以下は私の変更です:
親matchAny(msg -> {System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");LOG.info("unknown message: "+ msg);})
ケースがこのメッセージを処理します。しかし、何も起こりません。
更新 2
future.onFailure(futureFailureHandler(), ec);
私の調査によると、ステートメントをコメントアウトすると、parent.tell(23, ActorRef.noSender());
正常に実行されます。なぜこれが起こるのかまだわかりません。
私の要件は、将来のメッセージを親アクターに送信し、akka アクター システムのフォールト トレランスのために将来の障害を処理することです。
scala - Akka Supervisor 戦略 - 正しいユースケース
ビジネス ロジックの例外を処理するために Akka Supervisor Strategy を使用しています。
最も有名な Scala ブログ シリーズNeophyteの 1 つを読んでいると、彼が私がいつもやってきたこととは別の目的を与えていることがわかりました。
例:
外部リソースに接続する必要がある HttpActor があり、それがダウンしている場合は、例外をスローしますResourceUnavailableException
。
スーパーバイザーがそれをキャッチした場合、HttpActor で Restart を呼び出し、HttpActorpreRestart
メソッドで do aschedulerOnce
を呼び出して再試行します。
俳優:
スーパーバイザー:
ここでのポイントは何ですか?
私のdoRequest
メソッドがResourceUnavailableException
. 私が見る利点は、再試行回数を無料で取得できることと、例外自体を処理する優れた方法です。
ブログを見ると、再試行が必要な場合に備えて、次のようなメッセージを送信するだけの別のアプローチを示しています。
ここで の場合AskTimeoutException
、Future
彼は結果をオブジェクトとしてパイプしComebackLater
、これを処理します。
私にとって、これは戦略スーパーバイザーでできることのほとんどですが、再試行ロジックが組み込まれていない手動の方法です。
では、ここでの最善のアプローチは何ですか?またその理由は何ですか? akka スーパーバイザー戦略を使用するという私の概念は完全に間違っていますか?
java - Akka BackOff 監視戦略
私はBackOff
アクターで akka 監督を使用しています。アクターがメッセージを受信するたびに、akka デッド レター メッセージが表示されます。以下は私のログです:
以下は私のBackOff
スーパーバイザーコードです:
バックオフはどのように機能し、どのように上記の問題を解決できますか?
scala - 具体的なアクターの val として Supervisorstrategy をオーバーライドする
ScalaのActor
trait は次のように定義されています。
ただし、具体的なアクターのすべてのサンプルコードは次のように定義されていることがわかります。
私が理解しようとしているのは、なぜ supervisorStrategy
オーバーライドされているのval
ですか?
としてオーバーライドしてみませんdef
か?
メソッドが呼び出されるたびにこの評価が必要ないように、メモリの考慮事項のためですか?