web-dev-qa-db-ja.com

Akka Kill vs. Stop vs.Poison Pill?

Akkaの初心者の質問-私はAkka Essentialsを読んでいますが、誰かがAkka Stop/Poison PillとKillの違いを説明してもらえますか?この本は、「殺害は同期対毒薬は非同期である」という小さな説明を提供しているだけです。しかし、どのように?この間、呼び出し側のアクタースレッドはロックしますか?子供の俳優は、殺害中、停止後の誘発中などに通知されますか? 1つの概念と他の概念の使用例

どうもありがとう!

208
LaloInDublin

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

321
rs_atl

PoisonPillはいつでも使用できます。メールボックスに置かれ、他のメッセージと同様に消費されます。アクター内から「context.stop(self)」を使用することもできます。

1
JohnUK