我試圖在ClusterRouter
配置中向所有路由器廣播消息。我已經嘗試了兩種選擇。這一個:向Akka的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
的一個接收消息。思考?
爲了理解爲什麼我相信第一次嘗試應該有工作,一個人看AdaptiveLoadBalancingRounter.scala
,在AdaptiveLoadBalancingRouterLike
特點,創建Route
時:
{
case (sender, message) ⇒
message match {
case Broadcast(msg) ⇒ toAll(sender, routeeProvider.routees)
case msg ⇒ List(Destination(sender, getNext()))
}
}
正如我在郵件列表上所詢問的那樣:您能否在發送郵件時提供羣集實際上擁有多個成員的證明? –
我可以給你整個代碼,是的,但是,然後再次:(i)RoundRobinRouter向每個成員發送消息,(ii)通過遍歷網絡中所有成員的「手動」廣播似乎工作。 –