scala – 在akka中手动创建actor层次结构

我的应用程序需要能够创建actor的树结构.我想象的标准方法是将实例化代码放在actor中,这样他们就可以实例化他们的孩子.我宁愿的方法是能够在给定路径上实例化一个actor.比如在mySystem中创建actor A然后能够直接创建akka:// mySystem / A / B和其他actor.这样的功能是否存在?它会大大简化我的代码.

编辑:现在我不在我的手机上,让我详细说明.

说我上课了

class myActor extends actor

我需要制作一个这样的n路树.而不是像接收函数那样在接收函数中实例化自己的子节点所需的代码

case Create(n:Int) => {}

我希望通过不包括任何这些来简化myActor代码,而是能够在我的代码手动开始时创建我的层次结构.理想情况下这样(假设假设静态函数“创建”):

val sys = ActorSystem("mySystem")
Akka.Actors.Create("akka://mySystem/a",new myActor())
Akka.Actors.Create("akka://mySystem/a/b",new myActor())
Akka.Actors.Create("akka://mySystem/a/c",new myActor())

这将创建演员树:

a
 / \
b   c

现在,这存在吗?有没有更好的方法来实现这一点而不会使用实例化代码混淆我的actor代码

编辑,第2轮:

好的,看起来这个功能不存在.我改为创建了一个actor的子特性并强制我所有的实例化代码,以便我的具体实现类仍然很整洁.

解决方法

您的问题从解决方案的假设开始,遗憾的是它不包括问题的描述.

演员树最重要的是被理解为监督层次结构:父母处理其子女的失败以及父母在其子女生命周期中的生命周期.演员是否应该成为另一个演员的孩子需要通过考虑这些影响来确定.

我这样说是因为你的问题暗示你是根据其他一些标准对监督树进行建模,很可能将它作为一个注册表滥用system.actorFor作为查找机制.可能有极少数情况可行,但先验我不推荐它;我宁愿在调度程序actor中放入一个哈希映射,并让它处理查找.如果您通过测量得出结论 – 表现不够好,您可以使用router进行扩展.

现在回答你的问题:每个父母都需要创建自己的孩子,这意味着它必须以某种方式包含执行该操作的代码.您可以在层次结构中传递Props以使其中的一部分可配置,但您不应该在what supervision means左右工作;问问自己,如果其中一个叶子出现故障会发生什么,然后问问自己,当重新启动中间演员时,是否应重新启动和/或杀死假定的叶子.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...