問題タブ [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.

0 投票する
1 に答える
432 参照

actor - Akka.net - コーディネーターによる追加のエラー処理

次のような基本構造を持つ Akka.net ベースのアクター システムがあるとします。

コーディネーター アクターは、使用される監督戦略を定義しDirective.Restartます。

子アクターは、いくつかの理由で失敗する可能性があります (たとえば、ArithmeticExceptionInvalidOperationExceptionおよびMyCustomException)。

しかし、子が で失敗した場合MyCustomException、デフォルトの監視メカニズムを変更せずに何らかの方法で追加で処理できるようにしたいと考えています (再起動のアプローチはここでも機能するはずです)。たとえば、Console.Writeline例外の詳細を追加します。

どうすれば実装できますか?

0 投票する
1 に答える
172 参照

exception - トップレベルの Akka アクターのエスカレーションとシャットダウン フッキング

私の Akka システムには、トップレベル (「ルート」) のアクターがInitializerあり、他のすべてのアクターはそこから来ています。Destroyerまた、メッセージを受信したときにシステムを正常にシャットダウンする役割を担うアクター もありDestroyます。Destroyアクターが に を送信する条件はいくつかありますが、Destroyerここではあまり重要ではありません。

に機能を実装したいと思います。その子InitializerSupervisorStrategy1 人によってスローされた失敗/例外を処理できない場合、それを「世界を止める」タイプのイベントとして解釈し、システムを正常にシャットダウンします。 .

私のひざまずく反応はInitializer、失敗をエスカレートさせることですが、最上位のアクターがエスカレートするとどうなるかわかりません。そのエスカレーションが何らかの方法で を呼び出す方法があればいいのですが、Desroyerそれをすべて接続する方法がわかりません。何か案は?

0 投票する
1 に答える
1808 参照

akka - Akka System Guardian のカスタム スーパーバイザー戦略

System Guardianの Akka docs によると、最上位のアクターが をスローするExceptionと、無期限に再起動されます (2 つの例外があります - しゃれは意図されていません)。

私のアクター システムには、トップレベルのアクターが 1 つだけあります: Initializer. 例外がスローされた場合、可能であればInitializer、別の例外を適用したいと思います。SuervisorStrategy

  • Initializer3回まで再起動
  • それが機能しない場合は停止/終了します

システム ガーディアンにこのカスタム戦略を実装するにはどうすればよいですか?

0 投票する
1 に答える
472 参照

java - Akka Futures と Supervisor Strategies が失敗に対処する方法

アッカJavaはこちら。フューチャーを使用した「アスク」パターンに関する Akka ドキュメントを読んだところですが、スーパーバイザー戦略 (ディサイダー) と失敗コールバックの両方が図の一部であるシナリオに関して、いくつかのことがどのように機能するかを理解していません。

子供に尋ねる親

2 つのアクターがいてFizzBuzzFizzの親/作成者であるとしBuzzます。の親であるため、失敗を処理するFizzforがあります。BuzzSupervisorStrategyBuzz

場合によっては、いくつかのデータFizzを要求する必要がありBuzzます。これが発生すると、次の 3 つの結果のいずれかになります。

  1. Buzz正常に戻り、 ;を提供GetBuzzDataCallbackします。bDataまた
  2. BuzzをスローしBuzzIsAngryExceptionます。また
  3. Buzz他の種類の例外/エラーをスローします

後者の2つのケースで何が起こるのか疑問に思っています:

  • 例外は誰に、どのような順序で、どのように通知されますか? つまり、引数GetBuzzDataCallbackとして例外が送信されますか? Throwable failureまたは、FizzFailureDecider呼び出されますか?または両方 (コールバックとディサイダー/スーパーバイザー戦略の両方にエラーが渡されると、少し冗長で複雑に見えます)?

子以外に尋ねる親

がの親/作成者でFizzないことを除いて、上記と同じシナリオですBuzz。この場合、 (その引数GetBuzzDataCallbackとして) に例外が送信されたと想定できますか?Throwable failure

私の質問の根底にあるのはこれだと思います: スーパーバイザー戦略将来のコールバックが関係する場合、子例外がスローされたときに誰に通知され、どのような順序で通知されますか? 上で述べたように、両方が失敗/例外を受け取った場合Buzz、コールバックが例外で何か他のことをしようとしている間にスーパーバイザー戦略が再起動しようとしている可能性があるため、私にとってはさらに混乱します (競合する可能性があります)。

注意: 必須ではありませんが、提供されるコード スニペットが Scala ではなくJava である場合は、非常にありがたいです(Scala は私には象形文字のように見えます)。

0 投票する
1 に答える
355 参照

java - Akka とバックアップ/フォールバック アクター

私は、Akka のように失敗が第一級市民であるHystrix ランドでかなりの時間を過ごした後、Akka に来ています。

Hystrix では、インスタンスを RDB (MySQL など) に保存SaveFizzToDbCmdしようとする.ダウン/失敗し始めます:FizzSaveFizzToMemoryCmdFizz

Hystrix ではrun()、例外 (たとえば a SqlException) がスローされると、そのgetFallback()メソッドが呼び出されます。一定時間内に十分な数の例外がスローされると、HystrixCommands「サーキット ブレーカー」が「作動」し、getFallback()メソッドのみが呼び出されます。

私は Akka で同じことを達成することに興味がありますが、アクターを使用します。Akka では、次のようなJdbcPersistorアクターとInMemoryPersistorバックアップ/フォールバック アクターを使用できます。

私が苦労している問題は次のとおりです。

  • 障害が発生した場合InMemoryPeristorのバックアップとして正しく構成/配線する方法; JdbcPersistor
  • 「回復」した場合にフェールバックするJdbcPersistor(回復しない場合もあります)

これは 内に属するロジックだと思いますが、 AkkaJdbcPersistors SupervisorStrategyのドキュメントにも、この種の動作を実装するコード スニペットにも何も見つかりません。これは、「ねえ、これは Akka の動作方法ではないかもしれません。Akka ランドでは、この種のサーキット ブレーカー/フェールオーバー/フェールバックを行う別の方法があるかもしれません。」考え?

注意: Scala は私には象形文字のように見えるので、Java の例は非常に高く評価されています!

0 投票する
1 に答える
588 参照

java - Akka で再起動されたアクターによるメッセージの永続化と再生

アッカJavaはこちら。私は 2 つのアクター と を持っていParentますChild。前者は後者の親です。Child特定の例外 (たとえば、 ) をスローする場合UnrulyTeenagerExcepton、私が探している動作は次のとおりです。

  • は、例外がスローされたときParentに処理されていたメッセージへの参照を保存します。Childそれから
  • Childが再起動され、永続化されたメッセージが に「再生」されChildます。しかし
  • この保存 -> 再起動 -> 再生サイクルが 3 回発生し、ChildスローがUnrulyTeenagerException3回発生した場合SupervisorStrategy.escalate()

これまでの私の最善の試み:

しかし、ご覧のとおり、メッセージの永続性と再生に苦労しています。何か案は?Java コード サンプルは非常に高く評価されています。Akka は、Scala の象形文字を学習しなくても十分に頑丈です。