【问题标题】:How to get a reference to an existing actor from a non-actor in Akka?如何从 Akka 中的非演员那里获得对现有演员的引用?
【发布时间】:2023-04-06 05:44:01
【问题描述】:

在我的应用程序中,我有一个类需要与已经在 actorSystem 中创建的现有 actor 进行通信。如何从这个非参与者类中获取对该参与者的引用?

【问题讨论】:

    标签: scala akka actor


    【解决方案1】:

    如果您有对演员系统的引用 (https://doc.akka.io/api/akka/current/akka/actor/ActorSystem.html),那么您可以简单地使用演员的路径调用 actorSelection。这会给你一个ActorSelection,你可以在上面调用resolveOne,然后等到你得到actor的引用。获得演员参考后,您可以向其发送消息。

    以下是有关寻址参与者的更多信息:https://doc.akka.io/docs/akka/current/general/addressing.html

    【讨论】:

    • 我无法获得对演员系统的引用。我怎么得到它?是否有获取演员系统的 API?虽然我有演员本身的完整路径,但在演员选择中使用它是行不通的。例如:akka://squbs/user/myapp/loaderactor/ 不起作用。
    • 它给出一个错误:akka.actor.ActorNotFound: Actor not found for: ActorSelection[Anchor(akka://squbs/), Path(/user/myapp/*)]
    • 1) 首先你是如何实例化你的actors的?你的代码中没有类似myActorSystem.actorOf(propsBlahBlahBlah) 的东西吗?那么myActorSystem 就是你想要的东西。 2) 每个演员都必须有 some 指向它的路径。如果你没有得到演员,那么路径是错误的,或者你问了错误的演员系统。
    • 所以,我的应用程序建立在一个名为“squbs”的框架之上,根据文档,它是创建 Actor 时使用的 ActorSystem 的名称。我也在使用正确的路径。在这里 - akka://squbs/user/myapp/loaderactor/,用户之前的部分是我从打印actor路径中得到的actorSystem。
    • 你究竟是如何打印演员路径的?这是演员自己产生的输出吗?如果不是这样,那么你怎么知道这是“正确的路径”——如果它是正确的,你会得到想要的 actorRef,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多