【问题标题】:Akka parent not receiving message from childAkka父母没有收到孩子的消息
【发布时间】:2016-06-11 19:40:11
【问题描述】:

在 akka 层次结构下面是父子节点,父子节点向子节点发送消息,子节点以值 1 响应。但父节点似乎没有收到该值,因为消息“received is 1”没有打印到控制台.

我的层次结构设置正确吗? :

import akka.actor.Actor
import akka.actor.ActorSystem
import akka.actor.Props

class ChildActor extends Actor {
  def receive = {
    case receivedValue: Int => {
      println(receivedValue);
      context.parent ! 1
    }
  }
}

object ParentChild extends App {

  val system = ActorSystem()

  val parentActor = system.actorOf(Props[ParentActor])

  class ParentActor extends Actor {

    val childActor = system.actorOf(Props[ChildActor])
    childActor ! 1
    def receive = {
      case v: Int => println("received is " + v);
    }

  }

}

【问题讨论】:

  • 你在哪里向子演员发送消息?
  • 问题是子actor实际上并不是父actor的子actor,一个actor不会成为子actor只是在父actor中创建一个引用,您实际上需要在父上下文中创建一个引用。因此,您需要使用 context.actorOf(Props[ChildActor]) 而不是 system.actorOf(Props[ChildActor])
  • @curious 有效,如果回答错误接受

标签: scala akka


【解决方案1】:

因为您使用

创建了 childActor

val childActor = system.actorOf(Props[ChildActor])

这意味着它是一个顶级actor,它的父级是 ActorSystem 而不是您所期望的 ParentActor

要让它按预期工作,您需要按照以下方式创建 ChildActor

val childActor = context.actorOf(Props[ChildActor])

ParentActor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多