2012-07-25 3 views
1

J'utilise la fonction AKKA Remoting. Cela a très bien fonctionné sauf pour un problème. Si j'essaie de rechercher un acteur distant en fonction de son nom d'hôte, la recherche échoue. Cependant, si je le fais en fonction de l'adresse IP, cela fonctionne bien. Est-il possible de le faire fonctionner uniformément pour le nom d'hôte et l'adresse IP?AKKA Remoting recherche les acteurs distants échouent lorsque le nom d'hôte est utilisé

Mon application.conf est quelque chose comme ci-dessous:

akka { 
    version = "2.0.2" 
    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 
    remote { 
    transport = "akka.remote.netty.NettyRemoteTransport" 
    netty { 
     ... 
     use-passive-connections = off 
     hostname = "" 
     port = 8000 
     ... 
    } 
    ... 
    } 
} 

d'une autre machine:

actorSystem.actorFor("akka://[email protected]:8000/user/MyActor") //**Works** 
actorSystem.actorFor("akka://[email protected]:8000/user/MyActor") //**Fails** 

Répondre

0

Je l'ai vu ce comportement aussi bien. Je m'attendais à ce que le système d'acteur Akka prenne le nom d'hôte du système de java.net.InetAddress.getLocalHost.getHostName.

Cependant, cela ne semble pas toujours fonctionner. À la hausse, l'ajout du nom d'hôte à votre fichier application.conf devrait produire le résultat correct, permettant aux connexions à distance recherchées via context.actorFor("akka://host.domain.com:8000/user/whatever").

Même lorsque l'appel InetAddress ci-dessus produit la chaîne de nom d'hôte souhaitée, par ex. Aussi facile à vérifier dans la Scala REPL, Akka semble préférer se lier à l'adresse IP. Si vous souhaitez que Akka se lie automatiquement à l'alias au démarrage du système, vous pouvez envisager de modifier votre objet Config (définissez akka.remote.netty.hostname) avant de le transmettre au ActorSystem.apply.

Bien sûr, l'autre option, peut-être moins souhaitable, consiste simplement à définir la valeur sur chacun de vos nœuds déployés.

Espérons que ça aide!

Questions connexes