如何与呼叫者每隔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 => _
}
}
答案 0 :(得分:3)
您在来电者receive
后错过了等号。没有它,该方法被定义为返回Unit
(即没有有用的值),并且akka需要您从接收返回PartialFunction[Any,Unit]
。
现在,要以惯用的方式实际实现逻辑,您可能希望使用ReceiveTimeout,如下所示:
class Caller extends Actor {
self.receiveTimeout = Some(1000)
def receive = {
case ReceiveTimeout =>
self ! "msg"
}
}