我试图理解并使用akka持久性。我是这个EventSourcing世界的新手。
我试图让一个ActorRef列出一些项目,我得到这个“演员姓名不是唯一的”错误;所以我试图使用这个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))
}
答案 0 :(得分:1)
每个Actor都在ActorSystem中获取一个地址。
ActorPaths是Actor层次结构的表示。
在顶部是监护人演员,如所有名为&#34; user&#34;的用户演员的守护演员。它的路径类似akka://<system>/user
。
使用actorSystem.actorOf
创建的actor具有用户监护人作为主管:akka://<system>/user/$1
。如果提供了actor名称,那么该名称将用作节点名称。
system.acorOf(props, "Foo")
-> akka://<system>/user/Foo
同一层次结构级别必须的所有角色都有唯一的名称。 因此,如果您收到错误
演员姓名不是唯一的
然后你已经有一个同名的演员在你想要开始新演员的同一级别上运行。
另一个Actor(例如Foo)用context.actorOf(props, "Bar")
启动的Actors在启动它们的actor下面一层开始:akka://<system>/Foo/Bar
。
使用ActorSelection时,您传递一个锚点ref和一个相对ActorPath
。
E.g。如果您在Foo
并希望向Foo
的所有子演员发送消息,则可以使用通配符多播消息:
ActorSelection(self, "./*") ! message