Arn*_*sen 9 asynchronous scala akka
我正在尝试找到异步初始化actor的正确模式,以便我可以查找ActorRef它所需的依赖项.我想避免使用ActorSelection,因为它是
tell的看看Actor LifeCycle看起来几乎是同步的,直到消息循环开始,包括preStart等等,这让我觉得我只有两个选择之一:
使用签名为的工厂方法 Future[ActorRef]
构造actor的所有依赖项都是异步解析并通过via传递的Props.
这种方法的主要问题是你不能使用这个工厂在另一个actor内部构造一个actor,因为它有同样的问题,即它一直是乌龟,所有actor的层次结构及其异步连接.
使用become和stash转换演员
使用actorOf,立即生成一个actor ,ActorRef但它以初始化状态启动,执行依赖解析,stash同时传入消息,最后become执行运行状态和unstashAlling.
对于演员而言,这感觉更加惯用,即使我的所有依赖都将var取而代之val.
两者似乎都有很多开销,让我想知道我是否是最好的选择,或者我是否在文档中找不到合适的模式.
vars使用时,你的依赖关系没有理由变为:
val initializing: Actor.Receive = {
case Dependencies(d1, d2) => context.become(working(d1, d2))
}
def working(d1: Dependency, d2: Dependency): Actor.Receive = {
case msg => d1.fetch(...) // whatever
}
def receive = initializing
Run Code Online (Sandbox Code Playgroud)
此外,actorFor是a)弃用和b)不创建演员.
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |