2015-07-16 3 views
0

Я пытаюсь написать актера, который считает сообщения, которые он получает, и печатает, когда он попадает в определенное количество видимых сообщений.Акка Акка, не получающая Массив [Byte]?

Я получил его для работы, когда я отправляю сообщения актеру в виде строки, но когда я пытаюсь отправить и массив [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] точно так же, но я указать случай, как массив [Byte] вместо строки.

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 

} 

ответ

0

Я попробовал этот сценарий

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

и она работает просто отлично. Попробуйте добавить дополнительные каротажи после

case message: Array[Byte] => 

, чтобы увидеть это. Теперь ваш код не показывает никакой видимой реакции на это сообщение, если count меньше 50000, так как вы знаете, что «актер не выполняет функцию приема»?

+0

Я попробую еще раз. Я просто предполагаю, что это было не с тех пор, как я набросил на него 100 000 сообщений и не увидел отпечатков, но спасибо, я буду переоценивать логику подсчета. – erikreppel

Смежные вопросы