代码之家  ›  专栏  ›  技术社区  ›  KKO

Akka演员池和团体之间的差异

  •  5
  • KKO  · 技术社区  · 9 年前

    我刚刚开始Akka,我试图了解演员池和团体之间的区别,以及何时使用。在 doc 它简单地说,一个组不是由路由器创建的,所以这意味着他们没有主设备?

    在下面的情况下,您是否可以将消息直接从一个工作组(或池?)路由到另一个,而不通过主机发送?

    Akka

    1 回复  |  直到 9 年前
        1
  •  6
  •   dk14    7 年前

    关于差异:

    有时,与其让路由器参与者创建其路由 需要单独创建路由,并将其提供给 路由器。你可以通过一条路径来实现这一点 到路由器的配置。邮件将与一起发送 演员选择这些路径。

    因此,不同之处在于,在“池”的情况下,您的工作人员由池自动创建(并超级化)。在“组”的情况下,您必须首先创建参与者,然后传递路径列表(将在 ActorSelection )把这些演员变成大师:

    val router: ActorRef = // group's master, but not supervisor 
       context.actorOf(RoundRobinGroup(List("/user/workers/w1", "/user/workers/w2", "/user/workers/w3")).props(), "router4") 
    

    所以,两人都有一个优秀的演员( router ),但在第二种情况下,工作人员是由另一个参与者手动创建的,因此默认情况下,另一个角色会监督他们(当然,如果他们不是顶级的)并接收生命周期消息。因此,这里有三种演员:大师、主管和工人。

    关于“直接”路由。每个组/池都有自己的合成主参与者,因此当您向组发送消息时,总是先向主参与者发送消息。但是,如果您知道组成员的地址(如上面示例中的“/user/workers/w1”),则没有什么可以阻止您直接向工作人员发送消息。