2017-04-08 2 views
0

J'ai une application de jeu construite sur Java en utilisant l'acteur Akka. Récemment, j'ai rencontré des problèmes de performance liés au parallélisme. Je suis passé par Google et j'ai découvert que nous pouvions affecter des répartiteurs/exécutants personnalisés/épinglés aux acteurs. Au moment de la création de l'acteur, j'ai nommé l'acteur avec le nom de l'acteur ajouté avec un identifiant unique.définition du répartiteur pour l'acteur akka lorsqu'il est nommé avec l'UUID

Existe-t-il un moyen de spécifier à mes acteurs d'utiliser le répartiteur épinglé lorsque les noms des acteurs sont ajoutés avec un ID unique.

J'essaye de mettre à jour le application.conf comme ci-dessous et n'obtenant pas le résultat comme prévu. Il utilise toujours le répartiteur par défaut.

Mes acteurs sont à Akka: // application/utilisateur/acteur

akka.actor.deployment { 
    "/actorName*" { 
     dispatcher = mycustom-dispatcher 
    } 
} 

Références j'ai utilisé: http://doc.akka.io/docs/akka/2.1.4/java/dispatchers.html#Setting_the_dispatcher_for_an_Actor

+0

La dernière référence de configuration (http://doc.akka.io/docs/akka/2.4.17/java/dispatchers.html) n'a pas de caractère générique * dans son exemple. avez-vous essayé sans? Êtes-vous sûr qu'il n'y a pas de fautes de frappe? Comment confirmez-vous qu'il utilise toujours celui par défaut? –

+0

@Diego, les journaux confirmant que l'acteur utilisant le répartiteur par défaut. –

Répondre

0

Oui, vous pouvez attribuer explicitement un répartiteur à votre acteur [s].

import akka.actor.Props 
val myActor = 
    context.actorOf(Props[MyActor].withDispatcher("my-dispatcher"), "myactor1") 

ou variante java:

ActorRef myActor = 
    system.actorOf(Props.create(MyUntypedActor.class).withDispatcher("my-dispatcher"), 
    "myactor3"); 

avec la configuration

my-dispatcher { 
    executor = "thread-pool-executor" 
    type = PinnedDispatcher 
} 

Vérifiez plus la akka-docs

+0

Je cherche une option en ne touchant pas l'acteur.Y a-t-il un moyen de mentionner à travers la configuration? –

0
akka.actor.deployment { 
    "/actorName*" { 
    dispatcher = mycustom-dispatcher 
    } 
} 

Le ne fonctionne pas, parce que (de la documentation):

  • wildcards ne peut pas être utilisé pour correspondre partiellement section, comme ceci: /foo*/bar, /f*o/bar etc.

Vous pouvez cependant utiliser un caractère générique pour correspondre à tous les acteurs à un certain niveau dans la hiérarchie des acteurs. Par exemple, supposons que tous les acteurs pour lesquels vous souhaitez utiliser le répartiteur personnalisé résident sous akka://application/user/someParent/. Vous pouvez ensuite configurer tous les enfants directs de someParent de la manière suivante:

akka.actor.deployment { 
    "/someParent/*" { 
    dispatcher = mycustom-dispatcher 
    } 
} 

Lire la documentation liée pour plus d'options.