我正在开发一个需要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
}
}
}
以下是我能够在远程节点上创建actor的示例代码。
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]))
上面的代码在路由器的帮助下创建了远程actor。
如果我试图在没有路由器帮助的情况下创建演员:val actorA = actorSystem.actorOf(Props[Logger])
然后在我的本地系统上创建actor。
有没有办法在不使用路由器的情况下在远程节点上创建actor,或者没有告诉远程节点我想在哪里创建actor?
基本上我想要的是:val actorA = actorSystem.actorOf(Props[Logger])
应该在集群中的任何随机节点上创建actor(包括本地节点)。