收到Akka消息时,Scala计数器不会更新

时间:2016-09-22 02:03:36

标签: scala akka

我正在尝试使用以下代码制作一个小的Akka示例:

class Sender extends Actor {
  @volatile var numEchoes = 0

  def receive = {
    case Echo => {
      numEchoes += 1
      println(numEchoes)
      if(numEchoes < Main.NUMBER_OF_ECHOES) {
        println("Heard an echo...")
      }
      else {
        // all echoes have been received.
        println("All echoes heard.")
        context.system.terminate
      }
    }
  }
}

此演员将收到来自多个Echo演员的Receiver条消息:

class Receiver extends Actor {
  def receive = {
    case Echo => sender ! Echo
  }
}

但是,numEchoes始终打印出1。如果我做错了什么,我会期待0,但这个值让我相信其他东西在这里发挥作用,但我无法弄清楚它是什么。

其余的代码只是向这个特定的actor发送一定数量的消息(假设为10)。我看到Heard an echo...打印出10次,但此变量的值不会改变。

1 个答案:

答案 0 :(得分:0)

@wheaties是正确的。由于一些迟到的粗心复制粘贴,错误发生在Main对象中...当我创建1个Sender和10个Receiver个actor时,这就是我正在使用的代码:

// Create the actor that will send out the messages
val sender = actorSystem.actorOf(Props[Sender], "sender")

var actorList = List[ActorRef]()

for(i <- 1 to NUMBER_OF_ECHOES) {
  val receiver = actorSystem.actorOf(Props[Sender], "receiver"+i)
  actorList ::= receiver
}

当然,创建接收器作为发件人是完全错误的,所以我所要做的就是解决错误并正确地产生演员:

// Create the actor that will send out the messages
val sender = actorSystem.actorOf(Props[Sender], "sender")

var actorList = List[ActorRef]()

for(i <- 1 to NUMBER_OF_ECHOES) {
  val receiver = actorSystem.actorOf(Props[Receiver], "receiver"+i)
  actorList ::= receiver
}