Akka中演员池和组之间的区别

KKO*_*KKO 5 actor akka

我刚刚开始使用Akka,我正在尝试理解actor池和组之间的区别以及何时使用哪个.在文档中,它简要地说组不是由路由器创建的,这意味着它们没有主服务器?

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

阿卡

dk1*_*k14 6

关于差异:

有时,不是让路由器actor创建其路由,而是希望单独创建路由并将它们提供给路由器以供其使用.您可以通过将路由的路径传递到路由器的配置来完成此操作.消息将与ActorSelection一起发送到这些路径.

所以区别在于,在"池"的情况下,池中会自动创建(和监督)您的工作者.在"group"的情况下 - 你必须首先创建actor,然后将ActorSelection这些actor 的路径列表(将用于)传递给master:

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

因此,两者都有一个主演员(router),但在第二种情况下,工作人员是由另一个演员手动创建的 - 所以这个另一个演员默认监督它们(如果它们当然不是顶层)并接收生命周期消息.因此,您在这里有3种演员:主人,主管,工人.

关于"直接"路由.每个组/池都有自己的合成主actor,因此当您向组发送消息时,它总是首先转到主节点.但是,如果您知道组成员的地址(例如上面示例中的"/ user/workers/w1"),则不会阻止您直接向工作人员发送消息.