Akkaの初心者の質問-私はAkka Essentialsを読んでいますが、誰かがAkka Stop/Poison PillとKillの違いを説明してもらえますか?この本は、「殺害は同期対毒薬は非同期である」という小さな説明を提供しているだけです。しかし、どのように?この間、呼び出し側のアクタースレッドはロックしますか?子供の俳優は、殺害中、停止後の誘発中などに通知されますか? 1つの概念と他の概念の使用例
どうもありがとう!
stop
とPoisonPill
の両方が、アクターを終了し、メッセージキューを停止します。これらは、アクターにメッセージの処理を停止させ、そのすべての子に停止呼び出しを送信し、それらが終了するのを待ってから、その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
PoisonPillはいつでも使用できます。メールボックスに置かれ、他のメッセージと同様に消費されます。アクター内から「context.stop(self)」を使用することもできます。