与Scala.Actors相比,如何正确设置Akka.Actors

时间:2011-09-28 18:53:16

标签: scala actor akka

如何与呼叫者每隔n秒向消费者发送一条消息来运行2个Akka演员? 由于Scala.Actors库中没有循环反应方法,因此卡住了 不知何故,以下将无法编译和生成:

  

覆盖方法在特征中接收类型=>的Actor   Caller.this.Receive;方法接收具有不兼容的类型

object Foo {
  def init() {
    actorOf[Caller].start()
    actorOf[Consumer].start()
  }
}

class Caller extends Actor {

  def receive {
    while (true) {
      self ! "msg"
      Thread.sleep(1000)
    }
  }
}

class Consumer extends Actor {

  def receive = {
    case msg:String => doStuff()
    case e => _
  }
}

1 个答案:

答案 0 :(得分:3)

您在来电者receive后错过了等号。没有它,该方法被定义为返回Unit(即没有有用的值),并且akka需要您从接收返回PartialFunction[Any,Unit]

现在,要以惯用的方式实际实现逻辑,您可能希望使用ReceiveTimeout,如下所示:

class Caller extends Actor {
  self.receiveTimeout = Some(1000)

  def receive = { 
    case ReceiveTimeout => 
      self ! "msg"
  }
}