0

我正在关注akka 教程。基本上,有 a listener、 amaster和一些workers。

class Listener extends Actor {
  def receive = {
    case Report => // message from Master, print result, shutdown system
  }
}

class Master extends Actor {
  def receive = {
    case Calculate => // ask Workers to calculate
    case Result => // message from Workers, aggregate results. 
                   // if all Workers have reported back, stop self and children,
                   // and send Report message to Listener
}

class Worker extends Actor {
  def receive = {
    case Calculate => // work, send result back to Master
  }
}

我的问题是如何Listener从外部世界获得结果?假设Report消息是case class Report(results: Int).

4

2 回答 2

0

我已经想通了。只需在Listener收到Report消息时调用外部设置器。

object DataHolder {

  private var _data: Int = _

  def data = _data // getter
  def data_= (i: Int): Unit = _data = i // setter
}

class Listener extends Actor {
  def receive = {
    case Report(results) = {
      DataHolder.data = results // call external setter here
    }
  }
}
于 2013-09-12T20:12:48.263 回答
0
import scala.concurrent.Await
import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.duration._

implicit val timeout = Timeout(5 seconds)
val future = actor ? msg // enabled by the “ask” import
val result = Await.result(future, timeout.duration).asInstanceOf[String]
于 2015-07-18T21:59:48.950 回答