scala - Scala中Akka Actor 的调用方法

标签 scala akka actor

我有一个 Actor 定义如下:

class nodeActor(ID: String) extends Actor

其中包含一个方法,该方法用于在启动actor之前对其进行设置:
def addRef(actor:ActorRef)

我实例化这个 Actor 是这样的:
val node1 = system.actorOf(Props(new nodeActor("node1")), name="node1")

这给我返回了一个ActorRef。编译器不允许我在ActorRef上调用“addRef”,因为它是子类型的成员。因此,我使用以下方法转换节点:
node1.asInstanceOf[nodeActor].addRef(link1)

这使编译器保持满意状态。然后在运行时我得到
java.lang.ClassCastException: akka.actor.LocalActorRef cannot be cast to ActorStressTest.nodeActor

这对我来说似乎根本没有意义,因为它是一个子类型,我应该可以强制使用它。

有想法吗?

最佳答案

您不应该直接从另一个类调用actor的方法。它破坏了系统的整体设计,即

  • 通过仅与通过调用ActorRefactorOf
  • 获得的actorFor通信来封装 Actor 的特定实现
  • 使用可用的(!?)方法
  • 将角色之间的通信限制为消息传递

    如果您需要在ActorA中创建对另一个ActorB的引用,则可以:
  • ActorB的初始化代码中创建对ActorA的引用,如http://doc.akka.io/docs/akka/2.0.3/scala/actors.html
  • 所示。
  • ActorB的引用作为特定消息发送到ActorA。然后ActorA可以将引用存储在receive实现


  • 如果您需要调用一种方法来满足Interface/Trait约束,请查看Typed Actors

    关于scala - Scala中Akka Actor 的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291346/

    相关文章:

    scala - 测试创建子 Actor 的 Actor

    scala - 是否可以使用 'react' 等待多个子 Actor 完成,然后继续?

    eclipse - 调试不适用于 play 框架激活器、scala 和 eclipse

    scala - Scala AKKA Actor 的错误消息

    scala - Spark-单调增加的id在数据帧中没有按预期工作?

    scala - 使用 Akka 的简单服务器推送广播流程

    python - 如何向 Pykka actor 发送 RabbitMQ 消息?

    scala - 基本 Scala Actor : examples from books not "acting" at all

    Scala:具有匹配和副作用的条件 yield ?

    scala - 简化大规模匹配案例 - Scala