我的应用程序需要能够创建actor的树结构.我想象的标准方法是将实例化代码放在actor中,这样他们就可以实例化他们的孩子.我宁愿的方法是能够在给定路径上实例化一个actor.比如在mySystem中创建actor A然后能够直接创建akka:// mySystem/A/B和其他actor.这样的功能是否存在?它会大大简化我的代码.
编辑:现在我不在我的手机上,让我详细说明.
说我上课了
class myActor extends actor
Run Code Online (Sandbox Code Playgroud)
我需要制作一个这样的n路树.而不是像接收函数那样在接收函数中实例化自己的子节点所需的代码
case Create(n:Int) => {}
Run Code Online (Sandbox Code Playgroud)
我希望通过不包括任何这些来简化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())
Run Code Online (Sandbox Code Playgroud)
这将创建演员树:
a
/ \
b c
Run Code Online (Sandbox Code Playgroud)
现在,这存在吗?有没有更好的方法来实现这一点而不会使用实例化代码混淆我的actor代码?
编辑,第2轮:
好的,看起来这个功能不存在.我改为创建了一个actor的子特性并强制我所有的实例化代码,以便我的具体实现类仍然很整洁.
每个演员都有一个父母。为了做你想做的事,你需要一个Actor类作为所有其他参与者(根参与者除外)的父类。由于父 Actor 与监督 Actor 是同义词,因此您需要一些方法来指定应用于这些父 Actor 的监督策略。
我想您可以定义一个通用父级Actor以放置到参与者层次结构的内部位置,并编写一种方法来分解参与者路径名并创建由一个或多个这些路径决定的层次结构。您可能需要一种方法来指定监督策略,以及至少指定receive要安装在叶参与者中的函数。
由于只有 Actor 可以创建其子 Actor,因此父 Actor 必须响应用于创建其子 Actor(其他父 Actor 或叶 Actor)的消息,以某种方式想出一种方法来选择Actor为叶 Actor 实例化哪个子类。
但要回答你的问题,没有内置的东西可以做到这一点。我认为它没有足够的通用实用性来证明将其添加到 Akka 本身是合理的。
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |