gpt4 book ai didi

scala - Akka Actor的异步初始化

转载 作者:行者123 更新时间:2023-12-04 04:10:41 24 4
gpt4 key购买 nike

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

  • 关于它所指向的actor的数量是模棱两可的,并且
  • 有一些开销,这对于许多tell
  • 都是不希望的

    查看 Actor LifeCycle似乎几乎是同步的,直到消息循环开始为止,包括 preStart等,这使我认为我只有两个选择之一:

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

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

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

    使用becomestash转换角色

    actor是使用 actorOf创建的,立即产生 ActorRef,但是它以初始化状态开始,是否进行依赖关系解析,同时 stash对传入的消息进行编码,最后 become设置为Running状态, unstashAll设置。

    尽管我的依赖关系全部是 var而不是 val,但对于 Actor 而言,这感觉更加惯用了。

    两者似乎都非常麻烦,这让我想知道这是最好的选择还是只是我在文档中找不到合适的模式。

    最佳答案

    使用成为时,没有理由您的依赖项必须为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

    另外, actorFor是a)不推荐使用,b)不创建actor。

    关于scala - Akka Actor的异步初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31147603/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com