2017-01-05 2 views
0

Salut Je veux mettre en œuvre une stratégie de routeur qui sur un événement enverra un message au routeur, mais je ne sais pas comment obtenir une référence au routeur dans la mise en œuvre de la stratégie.Akka - superviseur de routeurStrategy- comment envoyer un message au routeur sur l'événement

C'est ce que je suis en train de faire:

val router = system.actorOf(RoundRobinPool(5, supervisorStrategy = OneForOneStrategy(){ 
     case _: ActorKilledException => Escalate 
     case _: ActorInitializationException => Escalate 
     case _ => self ! SomeMsg(); Restart 
    }).props(Props(classOf[MyClass]))) 

Lorsque l'auto doit être le routeur ActorRef, mais l'auto n'est pas reconnu dans ce contexte.

Répondre

0

Normalement, je ne crée le cas dans le routeur, mais en dehors

val workerRouter: ActorRef = context.actorOf(
    Props[Worker].withRouter(RoundRobinPool(nrOfWorkers)), name = "workerRouter") 

    val msgRouter: ActorRef = context.actorOf(
    Props[Worker].withRouter(RoundRobinPool(nrOfWorkers)), name = "msgRouter") 

Ensuite, dans ma fonction récepteur acteur

def receive: PartialFunction[Any, Unit] = { 
    case RunWorkersMsg => 
     workerRouter ! WorkMsg(i , numberOfElements) 
    case ResultMsg(value) => 
     msgRouter ! WorkMsg() 
    } 

Ici vous pouvez voir mon projet Akka avec un exemple https://github.com/politrons/Akka

+0

I Je veux avoir un routeur parce que dans mon projet il y a x acteurs avec le même code. maintenant je dois envoyer un message au routeur quand l'un des routages est terminé (pas diffusé, donc seulement un des routages existants le recevra). Dans votre exemple, si l'acteur meurt, il ne sera pas en mesure de notifier son échec à exactement l'un des x-1 acteurs vivants existants –