Trois façons de connaître l’existence d’un acteur akka

Je travaille sur les acteurs akka (JAVA) et j’ai récemment appris qu’il y avait 3 façons (peut-être plus) de connaître le rôle d’un acteur.

  1. Envoi d’un message d’identification :

    ActorSelection sel = actorSystem.actorSelection("akka://test/user/TestActor"); AskableActorSelection asker = new AskableActorSelection(sel); Future future = asker.ask(new Identify(1), new Timeout(5, TimeUnit.SECONDS)); ActorIdentity identity = (ActorIdentity) Await.result(future, timeOut.duration()); ActorRef reference = identity.getRef(); if(reference != null){ // Actor exists } else { // Actor does not exits } 
  2. Méthode resolOne :

     ActorSelection sel = actorSystem.actorSelection("akka://test/user/TestActor"); Future future = sel.resolveOne(new Timeout(5, TimeUnit.SECONDS)); // Wait for the completion of task to be completed. future.onComplete(new OnComplete() { @Override public void onComplete(Throwable excp, ActorRef child) throws Throwable { // ActorNotFound will be the Throwable if actor not exists if (excp != null) { // Actor does not exists } else { // Actor exits } } }, actorSystem.dispatcher()); 
  3. DeatchWatch : Créez un autre acteur appelez getContext (). Watch (ActorRef de actorToWatch); et vérifier la réception du message Terminated . Ceci ne peut être utilisé que sur un acteur déjà créé.

1, 2 indique l’existence d’un acteur et de 3 moniteurs. J’aimerais connaître les cas d’utilisation de ces trois logiciels et leurs effets sur les boîtes aux lettres et les fonctionnalités des acteurs, afin que je puisse choisir le type qui conviendra le mieux pour mon application.

Vérifier l’existence d’un acteur est-il une bonne pratique? Si non pourquoi .

Eh bien, il n’ya qu’une façon de savoir si un acteur a existé à un moment donné dans le passé: si vous en recevez un message. Tout ce qui précède ne sont que des variations sur ce thème.

Cela dit, une fois que vous avez ActorRef, vous pouvez utiliser DeathWatch pour être averti de la fin de l’acteur. Mais ne pas encore avoir reçu le message Terminé ne signifie pas que l’acteur est toujours en vie: le Terminé pourrait déjà être en route.

Pensez aux acteurs comme à des personnes qui ne peuvent communiquer qu’en envoyant un courrier électronique. Cette analogie fonctionne assez bien pour la sémantique de leur interaction.