List<String> paths = Arrays.asList("/user/cars/*");
ActorRef router =
getContext().actorOf(new BroadcastGroup(paths).props(), "router");
router.tell("which cars are green")
使用上面的代码我发送1000000辆汽车回复我的消息是“绿色”? 和 我希望50000辆汽车回答“是”,其余的(950000)回答“否”
我认为使用广播路由器,我正在以最有效的方式查询汽车。
但收集50000“绿色”答案的最快方法是什么?
Akka是否有内置解决方案?
(最好是并行收集答案而不仅仅是单个演员?)
答案 0 :(得分:3)
答案取决于你“收集”答案的含义。
如果你需要聚合它们(听起来像你这样做),最终需要在一个演员身上发生。这意味着您的100万个答案将全部排在单个演员身上,它将成为一个热点。
如果你可以忍受略慢的读取,另一种可能性是拥有多个反作用者,它们本身就是路由器的一部分(现在就说RoundRobin)。这将计数分为多个演员,但现在要获得真正的总计数,你必须要求所有演员并在阅读时汇总它们。如果你想记录很多“答案”,这种策略可能是有益的,但只有在延迟可能不那么重要的情况下才偶尔读取它们。