Akka 中 actor pools 和 groups 的区别

Difference between actor pools and groups in Akka

我刚刚开始使用 Akka,我正在尝试了解 actor pools 和 groups 之间的区别以及何时使用它们。在 doc 中它简要说明了组不是由路由器创建的,所以这意味着他们没有主控?

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

关于区别:

Sometimes, rather than having the router actor create its routees, it is desirable to create routees separately and provide them to the router for its use. You can do this by passing an paths of the routees to the router's configuration. Messages will be sent with ActorSelection to these paths.

因此不同之处在于,在 "pool" 的情况下,您的工作人员由池自动创建(和监督)。在 "group" 的情况下 - 您必须首先创建演员,然后将路径列表(将在 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),但在第二种情况下,工人是由另一个演员手动创建的 - 所以这个另一个演员默认监督他们(如果他们不是顶级 -当然是级别)和接收生命周期消息。因此,这里有 3 种参与者:主人、主管、工人。

关于"direct"路由。每个 group/pool 都有自己的合成主 actor,因此当您向群组发送消息时,它总是先发送给主 actor。但是,如果您知道群组成员的地址(如上例中的“/user/workers/w1”),您就可以直接向工作人员发送消息。