我正在开发一个需要 akka 集群的应用程序。我能够创建 akka 集群并创建演员并向他们传递消息。
以下是我的配置:
relay.system {
akka {
loglevel = "INFO"
actor {
provider = "akka.cluster.ClusterActorRefProvider"
}
remote {
log-remote-lifecycle-events = on
netty.tcp {
hostname = "vm1.iviws.local"
port = 3503
}
}
cluster {
seed-nodes = [
"akka.tcp://RelaySystem@vm1.iviws.local:3503"
"akka.tcp://RelaySystem@vm2.iviws.local:3503"
]
auto-down-unreachable-after = 30s
}
}
}
以下是我能够在远程节点上创建演员的示例代码。
import com.typesafe.config.ConfigFactory
val config = ConfigFactory.load
val akkaConfig = config.getConfig("relay.system")
val actorSystem = ActorSystem("RelaySystem", akkaConfig)
val roundRobinPool = RoundRobinPool(nrOfInstances = 4)
val clusterRouterSettings = ClusterRouterPoolSettings(totalInstances = 4, maxInstancesPerNode = 2, allowLocalRoutees = true, useRole = None)
val clusterRouterPool = ClusterRouterPool(roundRobinPool, clusterRouterSettings)
val router = actorSystem.actorOf(clusterRouterPool.props(Props[Logger]))
上面的代码在路由器的帮助下创建了远程参与者。
如果我尝试在没有路由器帮助的情况下创建演员:val actorA = actorSystem.actorOf(Props[Logger])
然后在我的本地系统上创建演员。
有没有办法在不使用路由器或不告诉远程节点我想在哪里创建演员的情况下在远程节点上创建演员?
基本上我想要的是:val actorA = actorSystem.actorOf(Props[Logger])
应该在集群中的任何随机节点(包括本地节点)上创建参与者。