2015-12-15 1 views
0

J'essaie donc de démarrer 2 instances d'une application Akka sur ma machine locale (dans des machines JVM séparées).Reliure de port nettoyeur de cluster Akka: Adresse déjà utilisée

Quand exemple # 1 commence isSeedNode = true (si le port est lié à 2552)

Lorsque par exemple # 2 commence isSeedNode = false (si le port doit se lier à 9999)

instance # 1 commence bien, mais quand l'instance # 2 commence, j'obtiens les exceptions ci-dessous, qui indiquent qu'il n'obéit pas à mes paramètres de port ...? Qu'est-ce que je fais mal

boolean isSeedNode = true; 

Config remotingConf = ConfigFactory.parseString(
        " remote {"+ 
        " enabled-transports = [\"akka.remote.netty.tcp\"]\n"+ 
        " netty.tcp {"+ 
        "  hostname = \"192.168.0.208\"\n"+ 
        "  port = "+ (isSeedNode ? 2552 : 9999)+"\n"+ 
        "  bind-port = "+ (isSeedNode ? 2552 : 9999)+"\n"+ 
        "  }"+ 
        " }"); 

Config combined = remotingConf.withFallback(appConfConfig); 

system = ActorSystem.create(name,ConfigFactory.load(combined)); 

Mon application.conf

akka { 

actor { 
    provider = "akka.cluster.ClusterActorRefProvider" 
    debug { 
    autoreceive = on 
    lifecycle = on 
    unhandled = on 
    } 
    } 
} 

jeté d'exemple EXCEPTION # 2 (quand par exemple # 1 est déjà en cours d'exécution)

Causée par: org.jboss. netty.channel.ChannelException: Impossible de lier à: /192.168.0.208:2552 Causé par: java.net.BindException: Adresse déjà utilisée

+0

Le chargement de la configuration est en repli dans le mauvais ordre, en utilisant la configuration par défaut, puis 'combiné' comme une solution de repli, plutôt que l'inverse. Faites-le 'combined.withFallback (ConfigFactory.load())' et il fonctionnera comme prévu. – johanandren

Répondre

0

Le problème était qu'au lieu de "remote", je devais spécifier "akka.remote". Ensuite, tout a fonctionné