我一直在努力让一些Akka示例启动并运行,并遇到了一个给我带来很多麻烦的问题。对我来说很奇怪的是,有些代码直接来自不起作用的文档。
import akka.actor._
import akka.routing.{ ActorRefRoutee, RoundRobinRoutingLogic, Router, Broadcast }
object TransformationManager {
case class ProcessFile(fileIt:Iterator[String])
case class ProcessLines(lines:List[List[String]], last:Boolean = false)
case class LinesProcessed(lines:List[List[String]], last:Boolean = false)
case object WorkAvailable
case object WorkRequest
}
class TransformationManager extends Actor {
import TransformationManager._
val workChunkSize = 10
val workersCount = 10
def receive = {
case ProcessFile(fileIt) =>
var router = {
val routees = Vector.fill(workersCount) {
val r = context.actorOf(Props[SampleWorker])
context watch r
ActorRefRoutee(r)
}
Router(RoundRobinRoutingLogic(), routees)
}
router ! Broadcast(WorkAvailable) //error here !!!!!!!!!
}
}
在最后一行代码中,
router ! Broadcast(WorkAvailable)
我收到了错误,
value ! is not a member of akka.routing.Router
我为什么这不起作用而感到茫然。
答案 0 :(得分:3)
参考文档路由器可能是一个演员,然后!
应该可以工作,但它不一定是,取决于你如何创建它。在这里阅读更多:
http://doc.akka.io/docs/akka/snapshot/scala/routing.html#A_Router_Actor
答案 1 :(得分:2)
!
上没有Router
。您可以使用router.route
发送消息。
router.route(msg, sender())