【发布时间】:2013-05-20 21:47:24
【问题描述】:
我正在尝试向ClusterRouter 配置中的所有路由广播消息。我已经尝试了两种选择。这个:
val workerRouter = context.actorOf(Props[ClusterRouter].withRouter(
ClusterRouterConfig(AdaptiveLoadBalancingRouter(metrics), ClusterRouterSettings(
totalInstances = 100, routeesPath = "/user/slave",
allowLocalRoutees = true, useRole = None))), name = "slaveRouter")
context.system.scheduler.schedule(2 seconds, 5 seconds, workerRouter, Broadcast(CapabilityRequest))
还有这个:
val broadcastRouter = context.actorOf(Props[ClusterRouter].withRouter(
ClusterRouterConfig(BroadcastRouter(Nil), ClusterRouterSettings(
totalInstances = 100, routeesPath = "/user/slave",
allowLocalRoutees = true, useRole = None))), name = "slaveRouter")
context.system.scheduler.schedule(2 seconds, 5 seconds, broadcastRouter, CapabilityRequest)
但是对于他们两个来说,只有一个slaves 收到了消息。想法?
为了理解为什么我认为第一次尝试应该成功,必须查看AdaptiveLoadBalancingRouterLike trait 中的AdaptiveLoadBalancingRounter.scala,当Route 被创建时:
{
case (sender, message) ⇒
message match {
case Broadcast(msg) ⇒ toAll(sender, routeeProvider.routees)
case msg ⇒ List(Destination(sender, getNext()))
}
}
【问题讨论】:
-
正如我在邮件列表中所问的那样:您能否在发送消息时证明您的集群实际上有多个成员?
-
我可以给你整个代码,是的,但话又说回来:(i)RoundRobinRouter 向每个成员发送消息,(ii)“手动”广播,我在其中迭代所有成员网络似乎工作。
标签: scala akka broadcast akka-cluster