2012-06-19 2 views
0

J'ai un programme de serveur client écrit en utilisant l'API Java. J'essaie d'envoyer un message au serveur, puis le serveur enverra un message de réponse au client. Le client enverra empoisonnement au serveur. Si le serveur reçoit un message empoisonnement, il doit être arrêté. Annulez les snippents de code pour le même. En ClientActor:Envoi d'empoisonnement au serveur à partir du client dans Akka

remoteActor.tell(poisonPill()); 

En ServerActor:

public void onReceive(Object message) throws Exception {   
    if (message instanceof String) {   
    getSender().tell(message + " got something");  
    } else if (message instanceof PoisonPill) {   
    getContext().system().shutdown();  
    } 
} 

Mais la ligne message instanceof PoisonPill n'est pas en cours d'exécution, de sorte que le serveur est toujours en cours d'exécution.

Quelqu'un peut-il m'aider à ce sujet? pourquoi la ligne ne s'exécute pas du tout?

+0

La seule façon dont cette ligne ne s'exécute pas est si le message est toujours une chaîne. Essayez le débogage ou la journalisation. – Thilo

+0

si le message est toujours une chaîne, alors y at-il de toute façon vérifier l'empoisonnement du client? – user1442237

+0

Vous remoteActor invoque une méthode poisonPill(). Renvoie-t-il un objet PoisonPill? –

Répondre

1

devrait-il pas être

remoteActor.tell(new PoisonPill()); 
+0

remoteActor.tell (nouveau PoisonPill()); ne fonctionne pas .. donner l'erreur de compilation – user1442237

+0

Non, c'est PoisonPill.getInstance() –

+0

PoisonPill.getInstance() lance aussi l'erreur de compilation – user1442237

3

PoisonPill est géré automatiquement par Akka. Vous ne devez pas terminer l'ActorSystem à partir de l'acteur. Cela équivaudrait à appeler System.exit (0) dans un objet métier. Si vous voulez arrêter le ServerActor, faites: context.stop (auto-)

Questions connexes