我正在阅读Actor Selection上的Akka文档,并尝试了解其工作原理。具体来说,我正在努力理解 命名约定Akka用于根据特定actor在actor“tree”中的位置及其名称设置路径。
我的理解是
/user/
actorSystem.actorOf(Props[ActorClassImpl], name = "SomeName")
),所有演员都会获得name
/user/
前缀加上层次路径(见下文)加上name
/user/
与演员之间所有父母的斜线分隔连接因此,如果名为fizz
的actor是根级actor,并且它有一个名为buzz
的子级,并且该子级本身有一个名为{child}的子级
foo
,那么foo的路径是/user/fizz/buzz/foo
,是吗?
首先,如果我对这个基本路径构造的工作方式的理解不正确,请首先纠正我!假设 我或多或少是正确的,演员是否有任何“无效”名称,例如名字中有空格或标点符号的演员?
答案 0 :(得分:2)
- 所有演员都可以在" root"路径名为
/user/
所有用户创建的演员都位于"/user/"
监护人演员的下方。 "/"
的演员是根守护者。根据{{3}}所述,在根守护者下面还有其他演员。
- 在创作时(通过
actorSystem.actorOf(Props[ActorClassImpl], name = "SomeName"
))所有演员都有一个名字
在此示例中,创建了一个名为ActorClassImpl
的顶级"SomeName"
actor。
- 演员的"路径" 是
/user/
前缀加上等级路径(见下文)加上{{1} }}- "等级路径"只是
name
和演员之间所有父母的斜线划分连接因此,如果名为fizz的actor是根级actor,并且它有一个名为buzz的子级,并且该子级本身有一个名为foo的子级,则foo的路径为/ user / fizz / buzz / foo,是吗?
对于用户创建的演员,这部分是正确的。 here还包括一个锚点。例如:
/user/
......有没有"无效"演员的名字,例如名字中有空格或标点符号的演员?
来自actor path:
name参数是可选的,但您最好为演员命名,因为它用于日志消息和识别演员。该名称不能为空或以
"akka://MyActorSystem/user/fizz/buzz/foo" // local "akka.tcp://MyActorSystem@somehost.com:1234/user/fizz/buzz/foo // remote
开头,但它可能包含URL编码字符(例如,$
表示空格)。如果给定名称已被另一个孩子用于同一父级,则会抛出%20
。