我最近一直在学习Scala并且一直停留在路由概念上。总的来说,我了解路由器的全部内容,但我不了解独立路由器和自包含路由器角色之间的区别。
我来回阅读文档,这对我来说仍然很混乱:https://doc.akka.io/docs/akka/2.5.3/scala/routing.html
有人可以解释我(如果可能的话,还有一些代码或参考)独立路由器和自包含路由器角色之间的区别是什么?
提前谢谢。
编辑:
根据文件:
路由器可以在演员内部或外部使用,您可以进行管理 路由你自己或使用自包含的路由器演员 配置能力
所以我猜,这都是关于如何管理路线的。在一种情况下,它们是手动管理的,而在另一种情况下,......我还没有看到它们如何通过自包含的路由器角色进行管理。
编辑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")
在表现或能力方面有什么不同吗?
答案 0 :(得分:0)
主要区别在于如何管理白痴。 您可以自己管理路由,也可以使用具有配置功能的自包含路由器actor。
案例1-为了管理路由,您必须创建routee actor并添加到 路由器。观察被委任演员被终止,所以他们可以 再次添加到路由器。 例如 - 从akka doc
中挑选var router = {
val routees = Vector.fill(5) {
val r = context.actorOf(Props[Worker])
context watch r
ActorRefRoutee(r)
}
Router(RoundRobinRoutingLogic(), routees)
正如您所看到的,创建路由器的actor必须确保添加路由。
案例2-自托管路由器就像线程池(Java线程池)。它是的集合 routee actor由路由器Pool管理,就像线程池管理器一样 线程。有一些优点,如动态调整大小功能 负载不足。 Routee创建自动完成。
new RoundRobinPool(5, new DefaultResizer(1, 10))
基本上自包含的路由器(池或组)可以被视为包装器。
编辑 - >组路由器保存路由的路径,而不是actor ref.So无论routee是否死亡,都会将消息路由到它。 组路由器的可能用例可以是共享路由的多个组路由器。