我有一个带有application.conf的akka集群,如下所示:
class Posts extends Component {
state = { posts: [] };
componentDidMount() {
fetch(url).then(res => this.setState({ posts: res.json().posts });
}
render() {
return ...
}
}
现在,种子节点是硬编码的。我想在这里配置一个参数:
remote { // Remote configuration for this seed node
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = ""
port = 2555
}
}
cluster {
seed-nodes = [
"akka.tcp://automation-akka-http@10.0.0.4:2555",
"akka.tcp://automation-akka-http@10.0.0.5:2555"
] // Seed nodes of the cluster
auto-down-unreachable-after = 10s
}
我知道我可以在sbt命令中定义这些参数以进行编译。但这无法解决我的问题,因为我只能在部署阶段拥有种子节点的IP。有没有办法在开始时定义这些参数。
答案 0 :(得分:1)
您可以使用Cluster(system).joinSeedNodes
以编程方式加入种子节点。
根据Akka API docs,它需要akka.actor.Address
的序列,然后它将是您的种子节点地址。
所以这样的事情应该有效:
val seeds = Seq(Address("akka.tcp", "RemoteSystem1", "host1", 1234),
Address("akka.tcp", "RemoteSystem2", "host2", 1234)
Cluster(system).joinSeedNodes(seeds)
的地方
修改
上创建了一个最小示例val cluster = Cluster(context.system)
// Join the seed node with the given address
seedPort match {
case Some(port) =>
cluster.joinSeedNodes(immutable.Seq(Address("akka.tcp", "ClusterSystem", "127.0.0.1", port)))
case _ =>
}
可以使用sbt“运行akkaPort [clusterPort]”运行。因此,最初使用两个相同的端口启动集群运行:
sbt "run 1337 1337"
然后使用不同的akkaPort运行另一个节点:
sbt "run 1338 1337"
此节点将加入。
如果省略clusterPort参数,它将不会执行此行:
cluster.joinSeedNodes(immutable.Seq(Address("akka.tcp", "ClusterSystem", "127.0.0.1", port)))
因此只使用application.conf文件中的种子节点。