Akka演员没有收到Array [Byte]?

时间:2015-07-16 21:19:39

标签: arrays scala concurrency akka actor

我正在尝试编写一个actor来计算它收到的消息,并在它遇到特定数量的消息时进行打印。

当我将消息作为字符串发送给actor时,我得到了它,但是当我尝试发送和Array [Bytes]时,演员没有执行它的接收功能,但是它也没有调用其他案例。

处理有效字符串的代码:

class CountingActor extends Actor {

  val log = Logging(context.system, this)
  val startTime = System.currentTimeMillis
  var count = 0
  val actorName = self.path.name

  def Count: Actor.Receive = {
    case message: String =>
      count += 1
      if(count % 50000 == 0 && count != 0){
        var elapsed = (System.currentTimeMillis - startTime) / 1000.0
        var mps = count / elapsed
        log.info(s"Processed $count messages in $elapsed ($mps msg/s) in $actorName")
      }

    case _ => log.info("Something happened and I dont know, it wasn't a string")
  }

  def receive = Count

}

无法处理的代码和Array [Byte]完全相同,但我将情况指定为Array [Byte]而不是string。

class CountingActor extends Actor {

  val log = Logging(context.system, this)
  val startTime = System.currentTimeMillis
  var count = 0
  val actorName = self.path.name

  def Count: Actor.Receive = {
    case message: Array[Byte] =>
      count += 1
      if(count % 50000 == 0 && count != 0){
        var elapsed = (System.currentTimeMillis - startTime) / 1000.0
        var mps = count / elapsed
        log.info(s"Processed $count messages in $elapsed ($mps msg/s) in $actorName")
      }

    case _ => log.info("Something happened and I dont know, it wasn't a string")
  }

  def receive = Count

}

1 个答案:

答案 0 :(得分:0)

我已尝试过这种情况

  val s = ActorSystem()
  val ca = s.actorOf(Props[CountingActor])
  ca ! Array[Byte](1, 1, 0)

它工作得很好。尝试在

之后添加其他日志记录
case message: Array[Byte] =>

看到这个。现在,如果count小于50000,您的代码不会对此消息显示任何明显的反应,那么您怎么知道"该演员没有执行它的接收功能"