我是 akka 和 akka 远程处理和 akka 集群的新手。我已经使用以下配置构建了一个系统
应用程序.conf
akka {
actor.provider = "akka.cluster.ClusterActorRefProvider"
extensions = ["akka.contrib.pattern.ClusterReceptionistExtension"]
actor.provider = "akka.cluster.ClusterActorRefProvider"
remote{
netty.tcp{
port = 0
hostname = "127.0.0.1"
}
}
cluster {
seed-nodes = [
"akka.tcp://ClusterSystem@172.16.23.67:8551",
"akka.tcp://ClusterSystem@172.16.23.67:8552"]
auto-down-unreachable-after = 10s
}
extensions = ["akka.contrib.pattern.ClusterReceptionistExtension"]
persistence {
journal.plugin = "akka.persistence.journal.leveldb-shared"
journal.leveldb-shared.store {
# DO NOT USE 'native = off' IN PRODUCTION !!!
native = off
dir = "target/shared-journal"
}
snapshot-store.local.dir = "target/snapshots"
}
}
worker.conf
akka {
actor.provider = "akka.remote.RemoteActorRefProvider"
remote{
netty.tcp{
port = 0
hostname = "127.0.0.1"
}
}
}
contact-points = [
"akka.tcp://ClusterSystem@172.16.23.67:8551",
"akka.tcp://ClusterSystem@172.16.23.67:8552"]
不明白的是,akka 系统将在我的本地启动,并使用种子节点来形成集群。这是否意味着种子节点应该已经在运行。这意味着该进程是否应该已经在这些 ip:port 上启动?
原因是:如果没有这个过程已经在运行,我会得到关联失败,因为它是封闭的。
*******UPADTE *****
上述问题是因为使用浮动 ips。我的节点在 Openstack Vm 上运行,它们确实有一个静态 IP。使用静态 IP 解决了问题。
另一个有趣的发现。当节点启动时,remote.netty.tcp 中的主机名应该是机器 inet,正如 Ryan 提到的,其中一个种子节点需要启动集群才能启动,因此让本地机器成为种子节点会更好。如果您有分布式种子节点,则更喜欢使用 localhost inet IP 而不是 127.0.0.1。