問題タブ [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 では、スーパーバイザーでシャットダウンを呼び出すと、監督しているすべてのアクターが停止しますか?
2 人のアクターをリンクしたスーパーバイザーがいるとします。アプリがシャットダウンするとき、それらのアクターを適切にシャットダウンしたいと考えています。Supervisor.shutdown() を呼び出すと、すべてのアクターが停止しますか?それとも自分のアクターを手動で停止する必要がありますか?
グラシアス
akka - Akka スーパーバイザー 管理スーパーバイザー
ここに隠された Akka を使用したアプリケーション設計に関するより広範な問題があると思いますが、「カーネル」または「トップ」スーパーバイザーが他のスーパーバイザーである子を監督するスーパーバイザー ツリーをどのようにセットアップするかをお尋ねします。
scala - Akka Supervisor から例外の詳細を取得するにはどうすればよいですか?
Actor
私が取り組んでいる新しいものが予期しないメッセージをどのように処理するかをテストしています。GibberishException
これらの場合は a がスローされると断言したいと思います。これまでのテストと実装は次のとおりです。
テスト:
実装:
ただし、テストを実行すると、例外の詳細がSupervisor
確立されますが、ログを記録したり、型をテストしたりする方法がわかりません。ここでスーパーバイザーから例外の詳細を取得できるようにしたいので、テストでそれらを再スローしてインターセプトできます。テスト メソッド以外では、実行中のアプリの UI で例外の性質を報告したい場合に、これが役立つと想像できます。それが起こったときからこれを取得する方法はありSupervisor
ますか?
scala - Akkaの分散アクター
私はAkkaにかなり慣れておらず、分散プログラミング全般に慣れていません。AkkaのMistコンポーネントを使用して、HTTPリクエストを非同期的に処理する監視対象アクターを作成しました。現在、すべてがローカルアクターを備えた1台の物理マシンで実行されています。私が理解していないのは、複数のボックスを備えた真のフォールトトレラントシステムを構築する方法です。Akkaのドキュメントに記載されているように:
また、(通常)一方のボックスがダウンしているかどうか、および/またはもう一方のボックスで話しているサービスがダウンしているかどうかを知る必要があります。ここで、アクターの監視/リンクは、リモートサービスの状態を監視するだけでなく、実際にサービスを管理するための重要なツールです。アクターまたはノードがダウンしている場合は、問題に対して何かを実行します。同じノードまたは別のノードでアクターを再起動するなど。
どうすればよいですか?アプリケーションの配布を開始する方法の例または指針を探しています。私たちのグループの他のサービスは、複数のTomcatインスタンスの前でApacheゲートウェイを使用するため、Tomcatサーバーがダウンした場合のイベントはユーザーに対して透過的です。サービスをAkkaマイクロカーネルにデプロイしており、複数の物理ボックスで同様のレベルの高可用性を実現する必要があります。
Akka1.1.3を使用しています。
java - Akka: 遅延間隔が大きくなる失敗時の再試行をスケジュールする方法は?
アクターに失敗時に何かを再試行させる良い方法はありますが、再試行間の時間間隔は長くなりますか? アクターに 15 秒後、30 秒後、1 分ごとに限られた回数だけ再試行させたいとします。
これが私が思いついたものです:
- 実際の作業を実行するアクターのメソッドには、オプションの
RetryInfo
パラメーターがあり、存在する場合、現在の再試行回数が含まれます。 - 失敗すると、アクターは自分自身に新しい
ScheduleRetryMessage
withを送信しretryCount + 1
、RuntimeException をスローします。 - 別のアクターがワーカー アクターを監督し、return をディレクティブとして使用し
new OneForOneStrategy(-1, Duration.Inf()
ますResume
。アクターには状態がないため、Resume
問題ないはずです - を受け取ると
ScheduleRetryMessage
、アクターは- if
retryCount < MAX_RETRIES
: Akka のスケジューラを使用してRetryMessage
、希望する遅延後に送信をスケジュールします - そうでなければ、最終的にあきらめて、エラー報告のために別のアクターにメッセージを送信します
- if
これは良い解決策ですか、それともより良いアプローチがありますか?
akka - Akka 2.0 では、スーパーバイザーをクラスター化することは可能ですか?
Akka を使用した適切なクラスタリングが Akka 2.1 の焦点であることは知っていますが、現在利用可能なもので何かを構築する必要があります。
マルチノードの Akka セットアップがあり、リモート アクターの死を適切に処理したいと考えています。ただし、システムは対称的であり、単一障害点があってはならないため、スーパーバイザー階層を適切にセットアップする方法がわかりません。スーパーバイザーは、Akka ノード全体の終了に対処する必要があるため、監視対象のアクターと同じ Akka インスタンスに存在することはできませんが、スーパーバイザーを別のノードに配置すると、監視対象のアクターが孤立または終了する危険性があります。スーパーバイザを実行しているノードが停止します。
私が本当に必要としているのは、クラスター化されたスーパーバイザーです。これにより、任意の Akka ノード (またはそれらの n 個) のアクターが一連のアクターの監視を処理して、単一障害点を回避できます。Akka 2.0でそのようなことは可能ですか? そうでない場合、同じ効果を得るための最良の方法は何ですか?
akka - MaximumNumberOfRestartsWithinTimeReached Akka 2.0 で同等
Akka 1.3.1 では、MaximumNumberOfRestartsWithinTimeRangeReached
最大再起動制限に達したときにスーパーバイザーがメッセージを受け取りました。
Akka 2.0に同等のものはありますか? 終了メッセージを取得できますが、この特定のエラー状態を検出できるようにしたかったのです。MaximumNumberOfRestartsWithinTimeRangeReached
また、便利なlastExceptionCausingRestartも提供しました。
scala - 監視戦略は ConnectException を処理できますか?
停電のためにリモートのアクターが利用できない場合、監視戦略は状況を処理できますか?
例をコーディングし、リモート アクター システムをシャットダウンしましたが、監視戦略では、リモート アクターが一度到達したときにスローされた例外のみが考慮されるようです。
私は Akka の専門家ではないので、これが達成可能かどうか知りたいです。
版:
接続でエラーが発生したことを示すイベントへのサブスクリプションを既に実装しています。メッセージが失われないように、送信者が最初に送信したメッセージにアクセスする必要があります。
scala - Akka 2.1例外処理(Scala)
ルーターを使用してメッセージをワーカーアクターに転送する監視Akkaアクターがいます。
スーパーバイザーをラップするクラスがあり、そのクラスのメソッドを呼び出すと、スーパーバイザーに何かをするように「要求」しAwait.result(theFuture)
、結果を待つために使用します(結果なしでは続行できません)。
ワーカーが例外をスローした場合、例外をスローしたワーカーを再起動し、ラッパークラスを呼び出すコードによって例外がキャッチされるようにします。
をルーターコンストラクターに渡しました。ルーターコンストラクターは、の場合にOneForOneStrategy
返されます。ワーカーの方法では、再起動をログに記録するので、ワーカーが実際に再起動されたことを検証できます。RESTART
Exception
postRestart
ワーカーが例外をスローすると、ワーカーは再起動されますが、例外は消えます。Future
スーパーバイザーに問い合わせた結果であるこれには例外が含まれていますが、akka.pattern.AskTimeoutException
これは20秒ではなく、わずか5秒後にスローされます。これは、私が残している暗黙のタイムアウトです。例外は、実際にはワーカーの起動後1秒以内に発生します。
質問1:ラッパークラスを呼び出すコードでワーカーから例外を取得するにはどうすればよいですか?
また、ワーカーの受信メソッドは次のようになります。
何かが例外をコンソールに記録していますが、それは私のコードではありません。スタックトレースは次のとおりです。
の169行目は、上記のメソッドのリストに示されてSource.scala
いる行です。val response = ???
receive
質問2:誰がその例外をコンソールに記録していますか?どうすればそれを止めることができますか?
java - Akka - 監視対象アクターの再起動
私のプロジェクトでは、再試行スキームを提供するために Akka (Java) を使用しています。そのため、メッセージを受信すると監視対象のアクターに委任するスーパーバイザー アクターがあります。スーパーバイザーを (無条件に) 再起動する 1 対 1 の戦略があります。
監視対象のアクターには、メッセージを自分自身に送信する preRestart フックがあります。
ここで、失敗したアクターの内部状態も保存したいと思います! 戦略が「再開」の場合にのみ状態が保持されることは理解していますが、その場合は onRestart フックが呼び出されず、メッセージが失われます。
質問:
1.これを達成する唯一の方法は、メッセージ自体に状態を設定して再起動することですか?
2.状態が連続した順序を維持している場合は、「順序付けられた」メールボックスの実装 (デキュー ベース) を提供する必要があります。それは正しい理解ですか?