Akka是否有内置的解决方案来收集广播路由器的答案?

时间:2014-11-18 17:08:53

标签: java scala akka

   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是否有内置解决方案?

(最好是并行收集答案而不仅仅是单个演员?)

1 个答案:

答案 0 :(得分:3)

答案取决于你“收集”答案的含义。

如果你需要聚合它们(听起来像你这样做),最终需要在一个演员身上发生。这意味着您的100万个答案将全部排在单个演员身上,它将成为一个热点。

如果你可以忍受略慢的读取,另一种可能性是拥有多个反作用者,它们本身就是路由器的一部分(现在就说RoundRobin)。这将计数分为多个演员,但现在要获得真正的总计数,你必须要求所有演员并在阅读时汇总它们。如果你想记录很多“答案”,这种策略可能是有益的,但只有在延迟可能不那么重要的情况下才偶尔读取它们。