0

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))
}
4

1 に答える 1

1

すべての Actor は ActorSystem 内のアドレスを取得します。

ActorPaths は、Actor 階層の表現です。上部には、「user」という名前のすべてのユーザー アクターの Guardian アクターのような Guardian アクターがあります。パスは次のようになりakka://<system>/userます。

で作成されたアクターにactorSystem.actorOfは、スーパーバイザーとしてユーザー ガーディアンがいます: akka://<system>/user/$1。アクター名が指定されている場合、その名前がノード名として使用されます。

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

同じ階層レベルのすべてのアクターには、一意の名前が必要ですしたがって、エラーが発生した場合

アクター名が一意ではありません

次に、新しいアクターを開始したい同じレベルで実行されている同じ名前のアクターが既に存在します。

別のアクター (Foo など) によって開始されたアクターはcontext.actorOf(props, "Bar")、それらを開始したアクターの 1 レベル下で開始されますakka://<system>/Foo/Bar

ActorSelection を使用する場合、アンカー ref と relative を渡しますActorPath

たとえば、 にいて、Fooのすべての子アクターにメッセージを送信したいFoo場合、ワイルドカードを使用してメッセージをマルチキャストできます。

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

akkaのドキュメントのこの部分を見てください

于 2015-09-28T18:03:17.270 に答える