对于Akka路由器的重要性,我对此持怀疑态度.我在我正在进行的当前项目中使用了Akka Routers.但是,我对它的重要性感到有些困惑.在以下两种方法中,哪种更有益.
我知道路由器会根据策略在其路由中分配传入消息.此外,我们可以有基于路由器的管理员策略.我也明白演员也是轻量级的,并不是创造尽可能多的演员的开销.因此,我们可以为每个传入消息创建actor,并在处理完成后根据需要将其终止.
所以我想了解上面哪一项设计更好?或者换句话说,在这种情况下(1)优于(2)或反之亦然.
yǝs*_*ǝla 12
好问题.在阅读Akka文档之前,我有类似的疑虑.原因如下:
效率.来自docs:
表面路由器看起来像普通演员,但实际上它们的实现方式不同.路由器旨在非常有效地接收消息并将其快速传递给路由器.
普通的actor可以用于路由消息,但是actor的单线程处理可能成为瓶颈.通过优化通常允许并发路由的消息处理管道,路由器可以实现更高的吞吐量.这是通过将路由器的路由逻辑直接嵌入其ActorRef而不是路由器actor中来实现的.发送到路由器的ActorRef的消息可以立即路由到routee,完全绕过单线程路由器actor.
当然,成本是路由代码的内部比使用普通参与者实现路由器更复杂.幸运的是,所有这些复杂性对于路由API的消费者来说都是不可见的.但是,在实现自己的路由器时需要注意的事项.
多个路由策略的默认实现.你总是可以写自己的,但它可能会变得棘手.您必须考虑监督,恢复,负载平衡,远程部署等.
Akka路由器模式对Akka用户来说很熟悉.如果您推出自定义路由,那么每个人都必须花时间了解所有极端情况和影响(+测试?:)).
TL; DR如果你不太关心效率,如果你更容易产生新的演员,那就去吧.否则使用路由器.