最近我一直在学习Scala,并且一直坚持路由的概念。总的来说,我知道路由器是怎么回事,但是我不明白独立路由器和独立路由器之间的区别。
我反复阅读了文档,这仍然让我非常困惑:https://doc.akka.io/docs/akka/2.5.3/scala/routing.html
请有人解释一下我(如果可能的话)一些代码或参考)独立路由器和独立路由器之间的区别是什么?
提前谢谢你。
编辑:
根据文件:
路由器可以在参与者的内部或外部使用,您可以自己管理路由器,也可以使用具有配置功能的自包含路由器参与者。
所以我想,这一切都是关于如何管理路由器的。在一种情况下,它们是手动管理的,而在另一种情况下,...well,我还不知道如何使用自包含的路由器参与者来管理它们。
编辑2:
再一次,根据文档,这就是他们在谈论自成一体的参与者时所指的东西。实际上,我一直使用这样的路由器,但是什么是独立路由器呢?
val router1: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router1")编辑3:
我想我的困惑来自以下代码。这被称为独立路由器:
Router(RoundRobinRoutingLogic(), routees)与此相比,有什么不同?
val router1: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router1")在性能或能力方面有什么不同吗?
发布于 2018-03-09 07:44:52
主要区别在于路由器是如何管理的。您可以自己管理路由器,也可以使用具有配置功能的独立路由器参与者。
案例1-为了管理路由器,您必须创建路由器参与者并添加到路由器中。注意路由器的演员被终止,这样他们可以再次被添加到路由器。选自阿克卡博士
var router = {
val routees = Vector.fill(5) {
val r = context.actorOf(Props[Worker])
context watch r
ActorRefRoutee(r)
}
Router(RoundRobinRoutingLogic(), routees)如您所见,创建路由器的参与者必须确保添加了路由器。
案例2-自管理路由器就像线程池(Java池)。它是由路由器池管理的路由器参与者的集合,就像线程池管理线程一样。它有一些优点,如在负载下动态调整大小。鲁蒂创造完成了自动化。
new RoundRobinPool(5, new DefaultResizer(1, 10))基本上,自包含路由器(池或组)可以被视为包装器。
编辑->组路由器保存路由者的路径,无论路由器是否死,参与者ref.So都不会将消息路由到它。群路由器的可能用例可以是多个共享路由器的组路由器。
https://stackoverflow.com/questions/49184588
复制相似问题