2017-01-01 3 views
1

J'ai des acteurs qui effectuent une simulation, puis renvoient des données. J'aimerais pouvoir exécuter la simulation plusieurs fois, j'ai donc besoin de réinitialiser les états internes de chaque acteur.Réinitialiser les acteurs Akka à l'état initial

Comment puis-je réinitialiser l'état interne d'un acteur, afin qu'il ait le même état que lorsque je l'ai créé?

+0

Pourquoi ne pas utiliser 'become'? Il y a beaucoup d'exemples sur le net – zella

Répondre

0

Il y a deux façons de le faire

réarmement manuel

Manipulez un message appelé reset et re-initialiser tout l'état de l'acteur par vous-même manuellement.

Voici l'exemple de code qui gère le message de chaîne de réinitialisation et réinitialise l'état de l'acteur.

class FooActor extends Actor { 
    var maybeBars: Option[ActorRef] = _ 
    def receive = { 
    case "foo" => println("foo") 
    case "reset" => maybeBars = _ 
    } 
} 

Remise à zéro automatique

deuxième façon est de lancer une exception dans l'acteur et de tuer l'acteur. Dans ce cas, la stratégie de superviseur akka par défaut redémarrera l'acteur avec l'état vide initial.

class FooActor extends Actor { 
    var maybeBars: Option[ActorRef] = _ 
    def receive = { 
    case "foo" => println("foo") 
    case "reset" => throw new Exception("reset") 
    } 
}