我正在尝试理解和使用akka持久性。我是EventSourcing世界的新手。
我试图得到一个ActorRef列出一些项目,我得到这个"演员的名字不是唯一的"错误;所以我尝试使用这个actorSelection方法。
问题是它要求路径。这是哪条路径?如果我使用PlayFramework的Akka.system(),我如何确保我使用的是正确的路径?
<当前代码/strong>:
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中获得一个地址。
Actor路径是Actor层次结构的表示。顶部是守护角色,例如所有名为"user"的用户角色的守护角色。路径与akka://<system>/user
相似
使用actorSystem.actorOf
创建的角色的管理员为用户guardian: akka://<system>/user/$1
。如果提供了参与者名称,则使用该名称作为节点名称。
system.acorOf(props, "Foo")
-> akka://<system>/user/Foo
同一层级上的所有actor必须有唯一的名字。因此,如果您得到错误
角色名不唯一
那么你已经有一个同名的演员运行在你想要启动新演员的同一关卡上。
由另一个Actor(例如由Foo)使用context.actorOf(props, "Bar")
启动的Actor,在启动它们的Actor的下一级启动:akka://<system>/Foo/Bar
。
当使用ActorSelection时,你传递一个锚ref和一个相对的ActorPath
。
。如果您在Foo
中,并希望向Foo
的所有子actor发送消息,您可以使用通配符多播消息:
ActorSelection(self, "./*") ! message
看一下这部分的akka文档