11
votes

Envoi d'une empièche empoisonnée à un acteur en Java

Je commence à apprendre Akka en migration d'une application Java SE existante. J'utilise AKKA 2.0.3.

À un moment donné, je dois envoyer une envoi empoisonnée à travers la file d'attente de message pour arrêter les acteurs. Mon acteur est instancié ainsi: p> xxx pré>

auquel j'essaie d'envoyer la poisonpill: p> xxx pré>

mais je reçois ce qui suit Erreur du compilateur: P>

import static akka.actor.Actors.*;
extractionActor.tell(poisonPill());


2 commentaires

+1 pour le titre de la question. Je n'ai aucune idée de ce que c'est à propos, mais il lit un peu comme une scène d'un thriller ou d'un film d'horreur :-)


C'est très vrai - je ne le lirais jamais comme ça! Croyez-moi, je suis en fait une très bonne personne dans la vraie vie.


3 Réponses :


8
votes

Veuillez lire la documentation AKKA, nous avons passé beaucoup de temps à la créer:

POISIONPILL FORT> P>

Vous pouvez également envoyer un acteur l'AKKA.ACTOR.POISONPILL Message, qui arrêtera l'acteur lorsque le message est traité. Empoisonnement empoisonné est en train d'être formé comme des messages ordinaires et sera traité après messages déjà mis en file d'attente dans la boîte aux lettres. P>

Utilisez-le comme ceci: P>

ActorRef ref = system.actorOf(new Props(JavaAPITestActor.class));
ref.tell(PoisonPill.getInstance());


7 commentaires

Désolé, j'aurais dû dire, j'ai lu la documentation et j'ai essayé cela avant de poser la question, mais non seulement je reçois la même erreur de compilation, je suis également dit que les acteurs sont obsolètes, c'est pourquoi j'ai essayé l'autre approche . Je vais mettre à jour ma réponse.


Génial, merci, j'ai modifié ma réponse pour refléter à la fois le déprécié et la nouvelle API.


Je suis retourné à Eclipse et ça compile bien! Je suppose que cela pourrait être un bug de l'idée, mais c'est probablement plus un cas de moi faire quelque chose qui ne va pas dans un IDE que je ne sais pas aussi bien ...


Je suis juste content que ce ne soit pas un problème à Akka :-)


J'ai le même problème. Je suppose que c'est une question d'idée. Compilation et course de fonctionnement bien.


Ouais, tu devrais essayer Eclipse :-)


Ce n'est plus vrai, un actorref est requis lorsque vous appelez, vous êtes donc censé passer dans l'actorref comme: cible.tell (poisonpill.getinstance (), actorref.nosender ());



6
votes

Comme mentionné dans ma réponse au commentaire ci-dessus, cela ne fonctionne pas dans l'idée ou lors de l'utilisation de grades pour compiler. C'est en fait une erreur de compilation depuis que l'expéditeur Actorref est requis. Je sais que les réponses précédentes sont vieilles et je ne sais pas si c'était une modification de l'API, pour que quiconque ait un problème similaire à utiliser: xxx

pour référence Voir: http://doc.akka.io/docs/akka /snapshot/java/lambda-actors.html#poisonPill


0 commentaires

0
votes

mise à jour de 25.03.2019 strong>

Les bonnes réponses de @viktor Klang et @ yash.vyas sont un peu obsolètes. Voici la syntaxe de travail actuelle de Scala 2.12.8 em> et jdk8 (1.8.0_172): p> xxx pré>

Vous pouvez également écrire: p>

...
accountB.tell(PoisonPill.getInstance,ActorRef.noSender)


0 commentaires