【问题标题】:value ! is not a member of akka.routing.Router价值 !不是 akka.routing.Router 的成员
【发布时间】:2015-09-24 04:47:30
【问题描述】:

我一直在努力让一些 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

我不知道为什么这不起作用。

【问题讨论】:

    标签: scala akka


    【解决方案1】:

    引用 docs 路由器可能是一个演员,然后 ! 应该可以工作,但它不一定是,取决于你如何创建它。在这里阅读更多: http://doc.akka.io/docs/akka/snapshot/scala/routing.html#A_Router_Actor

    【讨论】:

      【解决方案2】:

      Router 上没有 !。您使用router.route 发送消息。

      router.route(msg, sender())
      

      【讨论】:

      • 在 Akka 文档的第 3.6.4 节中,他们提供了一个广播消息被发送到路由器以便一次向所有路由发送消息的示例。他们的代码不正确吗? example
      • 顺便说一句,当我将广播放在味精中时,这对我有用,非常感谢。奇怪的是文档的代码不正确。我猜它只是被弃用了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      相关资源
      最近更新 更多