【问题标题】:Akka.Net Invoke an Action inside an Actor class from a non-Actor classAkka.Net 从非 Actor 类调用 Actor 类中的动作
【发布时间】:2020-04-26 11:58:12
【问题描述】:

标题几乎说明了一切。如果可能的话,我想从与 Actor 不在同一文件夹中的非 Actor 类调用 Actor 类中的 Action。

【问题讨论】:

    标签: action actor akka.net


    【解决方案1】:

    在演员模型中,您不会对演员“调用动作”。您可以要求某事或告诉某事。
    为此,您需要演员的地址,在 akka.net 中您需要 IActorRef

    我不确定您所说的“文件夹”是什么意思,我将列举每个可能的含义和答案:

    1. 相同的物理文件夹
      • actor 类的物理位置和“调用类”的物理位置与向actor 发送消息的能力无关。
    2. 相同的命名空间文件夹
      • 命名空间不会直接影响向参与者发送消息的能力。它可能只受要发送的消息类的可见性影响。
    3. 相同的地址文件夹
      • 同样,address 文件夹不会影响向参与者发送消息的能力。

    为了能够向参与者发送消息,您只需要 IActorRef,有多种方法可以管理这些引用,我不会在这里写,因为这取决于您的应用程序架构。

    不过,我要提一下,您还可以使用 ActorSystem.ActorSelection 方法来获取位于某个路径的演员的引用,但这不是 推荐,因为它可能很容易被滥用,并可能导致一些不良习惯。它的使用应被视为一项高级功能。

    一旦你掌握了演员参考,你就可以从你的非演员类中调用Ask方法,如果你期望一些结果(注意,结果将被包装在一个你必须设法检索结果)。
    如果您不期望得到答案(或者如果您不关心响应),您可以调用 Tell 方法。
    您必须将要发送给参与者的消息传递给这两种方法。

    最后,一旦演员收到您的消息,您的消息将最终被处理,然后演员将执行其设计的任何操作。

    如果您还没有这样做,bootcamp 是学习 akka.net 基础的好方法。

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      相关资源
      最近更新 更多