Question pour débutant d'Akka - Je lis sur Akka Essentials, quelqu'un pourrait-il expliquer la différence entre Akka Stop / Poison Pill et Kill? Le livre offre juste une petite explication "Kill est synchrone vs Poison pill est asynchrone." Mais de quelle manière? Le thread de l'acteur appelant se verrouille-t-il pendant cette période? Les enfants acteurs sont-ils avertis lors de la mise à mort, de l'envie après l'arrêt, etc.? Exemples d'utilisations d'un concept par rapport à l'autre?
Merci beaucoup!
context.become
?context.become
désigne le comportement à appliquer au message suivant, ce qui signifie qu'il prend effet après le traitement du message en cours; à cet égard, il en est tout à fait ainsicontext.stop(self)
.Réponses:
Les deux
stop
etPoisonPill
mettront fin à l'acteur et arrêter la file d'attente de messages. Ils obligeront l'acteur à cesser de traiter les messages, à envoyer un appel d'arrêt à tous ses enfants, à attendre qu'ils se terminent, puis à appeler sonpostStop
crochet. Tous les autres messages sont envoyés à la boîte aux lettres des lettres mortes.La différence réside dans le traitement des messages avant le début de cette séquence. Dans le cas de l'
stop
appel, le message en cours de traitement est terminé en premier, tous les autres étant rejetés. Lors de l'envoi d'unPoisonPill
, il s'agit simplement d'un autre message dans la file d'attente, de sorte que la séquence démarre lorsque lePoisonPill
est reçu. Tous les messages qui le précèdent dans la file d'attente seront traités en premier.En revanche, le
Kill
message amène l'acteur à lancer unActorKilledException
qui est géré à l'aide du mécanisme de supervision normal. Le comportement ici dépend donc de ce que vous avez défini dans votre stratégie de superviseur. La valeur par défaut est d'arrêter l'acteur. Mais la boîte aux lettres persiste, donc lorsque l'acteur redémarre, il aura toujours les anciens messages à l'exception de celui qui a provoqué l'échec.Voir également la section «Arrêter un acteur», «Tuer un acteur» dans la documentation:
http://doc.akka.io/docs/akka/snapshot/scala/actors.html
Et plus sur les stratégies de supervision:
http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html
la source
context.stop(self)
?Utilisez PoisonPill chaque fois que vous le pouvez. Il est placé sur la boîte aux lettres et est consommé comme tout autre message. Vous pouvez également utiliser "context.stop (self)" depuis un acteur.
la source
PoisonPill arrête de façon asynchrone l'acteur une fois qu'il a terminé tous les messages reçus dans la boîte aux lettres, avant PoisonPill.
la source
Vous pouvez utiliser à la fois l'arrêt d'acteur et la pilule empoisonnée pour arrêter le traitement des acteurs et tuer pour mettre fin à l'acteur dans son intégralité. x.stop est un appel que vous effectuez dans la méthode de réception akka, ne remplacera l'état d'acteur par un nouvel acteur qu'après avoir appelé postStop. X ! PoisonPill est une méthode que vous transmettez à l'acteur pour arrêter le traitement lorsque l'acteur est en cours d'exécution (recommandé). remplacera également l'état de l'acteur après avoir appelé postStop. x.kill mettra fin à l'acteur et supprimera l'acteur dans le chemin de l'acteur et remplacera l'acteur entier par un nouvel acteur.
la source