我刚刚开始使用Akka,我正在尝试理解actor池和组之间的区别以及何时使用哪个.在文档中,它简要地说组不是由路由器创建的,这意味着它们没有主服务器?
在下面的情况中,您是否可以直接将消息从一个工作组(或池?)路由到另一个工作组(而不是通过主服务器发送)?

关于差异:
有时,不是让路由器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"),则不会阻止您直接向工作人员发送消息.
| 归档时间: |
|
| 查看次数: |
2699 次 |
| 最近记录: |