【发布时间】:2015-12-15 22:17:00
【问题描述】:
所以我试图在我的本地机器上启动 2 个 Akka 应用程序实例(在不同的 JVM 中)。
当实例 #1 启动时 isSeedNode = true(因此端口绑定到 2552)
当实例 #2 启动时 isSeedNode = false(所以端口应该绑定到 9999)
实例#1 启动正常,但是当实例#2 启动时,我得到以下异常,这表明它不遵守我的端口设置...?我做错了什么
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));
我的应用程序.conf
akka {
actor {
provider = "akka.cluster.ClusterActorRefProvider"
debug {
autoreceive = on
lifecycle = on
unhandled = on
}
}
}
从实例 #2 抛出的异常(当实例 #1 已经运行时)
原因:org.jboss.netty.channel.ChannelException:绑定失败:/192.168.0.208:2552 原因:java.net.BindException:地址已在使用中
【问题讨论】:
-
配置加载以错误的顺序回退,使用默认配置,然后
combined作为回退,而不是相反。将其设为combined.withFallback(ConfigFactory.load()),它将按您的预期工作。
标签: akka akka-cluster