【问题标题】:Akka Actor Selection with invalid names名称无效的 Akka 演员选择
【发布时间】:2018-05-15 17:50:31
【问题描述】:

我正在阅读 Actor Selection 上的 Akka 文档并试图了解它是如何工作的。具体来说,我试图了解 命名约定 Akka 用于根据特定 Actor 在 Actor“树”中的位置及其名称设置路径。

我的理解是

  • 所有actor都可以在名为/user/的“根”路径下使用
  • 在创建时(通过actorSystem.actorOf(Props[ActorClassImpl], name = "SomeName"))所有Actor都被赋予name
  • Actor 的“路径”是/user/ 前缀加上一个层次结构路径(见下文)加上他们的name
  • “层次结构路径”只是/user/ 和演员之间所有父级的斜线分隔连接

因此,如果名称为 fizz 的演员是根级别的演员,并且它有一个名为 buzz 的子级,并且该子级本身有一个名为 foo,那么 foo 的路径是 /user/fizz/buzz/foo,是吗?

首先,如果我对这个基本路径构造的工作原理的理解不正确,请先纠正我!假设 我或多或少是正确的,演员有没有“无效”的名字,比如名字中有空格或标点符号的演员?

【问题讨论】:

    标签: akka


    【解决方案1】:
    • 所有actor都可以在名为/user/的“根”路径下使用

    所有用户创建的actor都位于"/user/" 守护actor 下方。 "/" 的演员是根监护人。如here 所述,在根监护人下方还可以找到其他演员。

    • 在创建时(通过 actorSystem.actorOf(Props[ActorClassImpl], name = "SomeName"))所有 Actor 都会被命名

    在此示例中,创建了一个名为 "SomeName" 的顶级 ActorClassImpl 演员。

    • Actor 的 “路径” 是 /user/ 前缀加上 层次结构路径(见下文)加上它们的 name
    • “层次结构路径”只是/user/ 和演员之间的所有父级的斜线分隔连接

    因此,如果名称为 fizz 的 actor 是根级别的 actor,并且它有一个名为 buzz 的子级,并且该子级本身也有一个名为 foo 的子级,那么 foo 的路径是 /user/fizz/buzz/是吗?

    对于用户创建的演员,这是部分正确的。 actor path 还包括一个锚。例如:

    "akka://MyActorSystem/user/fizz/buzz/foo"                      // local
    "akka.tcp://MyActorSystem@somehost.com:1234/user/fizz/buzz/foo // remote
    

    ...演员的名字是否“无效”,例如演员的名字中有空格或标点符号?

    来自documentation:

    name 参数是可选的,但您最好为您的参与者命名,因为它用于日志消息和识别参与者。名称不能为空或以$ 开头,但可以包含 URL 编码字符(例如,%20 表示空格)。如果给定名称已被同一父级的另一个子级使用,则抛出 InvalidActorNameException。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2014-11-15
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      相关资源
      最近更新 更多