Akka独立路由器与自包含路由器角色

时间:2018-03-09 00:06:54

标签: scala akka

我最近一直在学习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")

在表现或能力方面有什么不同吗?

1 个答案:

答案 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是否死亡,都会将消息路由到它。 组路由器的可能用例可以是共享路由的多个组路由器。