Akka Actor的异步初始化

阿恩·克拉森(Arne Claassen)

我试图找到适当的模式来异步初始化一个actor,以便我可以查找ActorRef它所需的从属对象我想避免使用ActorSelection,因为它是

  • 它所指向的参与者数量是模棱两可的,并且
  • 有一些开销,这是不可取的很多tell小号

观察Actor LifeCycle,直到消息循环开始为止几乎都是同步的,包括preStart等,这使我认为我只有以下两种选择之一:

使用签名为的工厂方法 Future[ActorRef]

构造actor的所有依赖关系均以异步方式解析并通过传入Props

这种方法的主要问题是,您不能使用该工厂在另一个actor内构造一个actor,因为它存在相同的问题,即,它一直处于乌龟状态,异步连接所有actor的层次结构及其依赖关系。

使用becomestash转换演员

使用来创建actor actorOf,立即导致,ActorRef但它以Initialization状态开始,执行依赖关系解析,同时stash处理传入的消息,最后become进入Running状态并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

此外,actorFora)已弃用,b)未创建演员。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章