1. ホーム
  2. スカラ

[解決済み】Akka Kill vs. Stop vs. Poison Pill?

2022-04-09 13:27:12

質問

Akkaの初心者の質問 - Akka Essentialsを読んでいるのですが、AkkaのStop/Poison PillとKillの違いを誰か説明してくれませんか?この本は、ほんの少しの説明を提供します "Kill は同期であり、Poison Pill は非同期です " しかし、どのように?この間、呼び出し側のアクターはスレッドロックをするのでしょうか?子アクターは、kill中やpost-stop envoke中などに通知されるのでしょうか?一方のコンセプトと他方のコンセプトの使用例を教えてください。

ありがとうございます。

解決方法は?

両方 stopPoisonPill はアクターを終了させ、メッセージキューを停止させます。 これらは、アクターがメッセージの処理を停止し、すべての子プロセスに停止コールを送信し、それらが終了するのを待ち、その後、アクターの postStop フックを使用します。 それ以降のメッセージはすべて死んだ手紙のメールボックスに送られます。

違いは、このシーケンスが始まる前に、どのメッセージが処理されるかという点です。 の場合は stop の呼び出しでは、現在処理中のメッセージが最初に完了し、他のメッセージはすべて破棄されます。 を送信する場合 PoisonPill の場合、これは単にキューにある別のメッセージなので、シーケンスは PoisonPill を受信します。 キューでそれより前にあるメッセージはすべて最初に処理されます。

これに対して Kill メッセージは、アクターに ActorKilledException これは、通常のスーパーバイザーのメカニズムで処理されます。 つまり、ここでの動作は、スーパーバイザー戦略で何を定義したかに依存します。デフォルトでは、アクターを停止します。しかし、メールボックスは持続するので、アクターが再起動したとき、失敗の原因となったものを除いて、古いメッセージをまだ持っています。

ドキュメントの「アクターの停止」、「アクターの強制終了」のセクションも参照してください。

http://doc.akka.io/docs/akka/snapshot/scala/actors.html

さらに監督戦略について

http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html