Akka Persistence Actor选择路径?

Akka Persistence ActorSelection path?

我正在尝试理解和使用 akka 持久性。我是这个 EventSourcing 世界的新手。

我正在尝试获取 ActorRef 来列出一些项目,但我收到此 "actor name is not unique" 错误;所以我正在尝试使用这个 actorSelection 方法。

问题是它要求路径。那是哪条路?如果我使用 PlayFramework 的 Akka.system()?

,我如何确保我使用的路径正确

当前代码:

def index = Action {
    val queryActor = Akka.system.actorOf(IssuesView.props, IssuesView.actorName)
    val inbox = Inbox.create(Akka.system)
    inbox.send(queryActor, IssuesView.GetAll)
    val issueSet = inbox.receive(1 seconds).asInstanceOf[IssueSet]
    Ok(views.html.index(issueSet.issues.toSeq))
}

每个 Actor 在 ActorSystem 中都有一个地址。

ActorPath 是 Actor 层次结构的表示。 顶部是监护人角色,例如所有名为 "user" 的用户角色的监护人角色。它的路径类似于 akka://<system>/user.

使用 actorSystem.actorOf 创建的 actor 将用户监护人作为主管:akka://<system>/user/。如果提供了参与者名称,则该名称将用作节点名称。

system.acorOf(props, "Foo")
-> akka://<system>/user/Foo

同一层次结构级别上的所有参与者必须具有唯一名称。 因此,如果你得到一个错误

actor name is not unique

那么你已经有一个同名演员 运行 在你想要开始新的同一级别。

由另一个具有 context.actorOf(props, "Bar") 的 Actor(例如由 Foo)启动的 Actor 比启动它们的 Actor 低一级启动:akka://<system>/Foo/Bar.

当使用 ActorSelection 时,您传递一个锚点引用和一个相对 ActorPath

例如如果您在 Foo 并想向 Foo 的所有子演员发送消息,您可以使用通配符来 多播 消息:

ActorSelection(self, "./*") ! message

看看this part of the akka documentation