我试图找到正确初始化actor的模式,以便我可以查找它需要的相关ActorRef
。我想避免使用ActorSelection
,因为它是Akka Actor的异步初始化
- 模棱两可所指向演员的数量,并
- 具有一些开销,这是不可取的许多
tell
小号
纵观Actor LifeCycle它似乎几乎是同步的,直到消息循环开始,包括preStart
等,这导致我认为我只有以下两种选择中的一种:
使用工厂方法的Future[ActorRef]
所有依赖的签名构建演员是异步解决,通过Props
传递英寸
这种方法的主要问题是,你不能使用这个工厂在另一个actor中构造一个actor,因为它有相同的问题,也就是说,它一直是乌龟,连接所有actor的层次结构,它们的依赖性是异步的。
使用become
和stash
转型演员
演员与actorOf
创建,立即产生一个ActorRef
但在初始化状态开始,做它的解决依赖,stash
荷兰国际集团在收到的消息同时,最后还有运行状态和unstashAll
ing。
对于演员来说,这种感觉更具惯用,即使我的依赖关系都是var
而不是val
。
两者似乎都有很大的开销,这让我想知道这些是最好的选择还是我没有在文档中找到正确的模式。
编辑我的使用'actorFor',这是一个错字。 “成为”当然看起来是最好的方法。仍然不能相信没有异步版本的'Props'食谱 –
我已经创建了一个基于'become' /'stash'的初始化阶段的特征,其中包含您对不可变运行状态的建议:https://gist.github。 COM/sdether/15bc96e27ed965bd89c3 –