【问题标题】:how to correctly setup Akka.Actors compared to Scala.Actors与 Scala.Actors 相比如何正确设置 Akka.Actors
【发布时间】:2011-09-28 18:53:15
【问题描述】:

如何在调用者每 n 秒向消费者发送一条消息的情况下运行 2 个 Akka 演员? 由于没有像 Scala.Actors 库中那样的循环反应方法,我被卡住了 不知何故,以下内容将无法编译和生成:

在类型的 trait 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 => _
  }
}

【问题讨论】:

    标签: scala actor akka


    【解决方案1】:

    在 Caller 中 receive 之后缺少等号。没有它,该方法被定义为返回Unit(即没有有用的值),而akka 需要你从receive 中返回一个PartialFunction[Any,Unit]。

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

    class Caller extends Actor {
      self.receiveTimeout = Some(1000)
    
      def receive = { 
        case ReceiveTimeout => 
          self ! "msg"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2020-05-21
      相关资源
      最近更新 更多