我正在尝试编写一个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
}
答案 0 :(得分:0)
我已尝试过这种情况
val s = ActorSystem()
val ca = s.actorOf(Props[CountingActor])
ca ! Array[Byte](1, 1, 0)
它工作得很好。尝试在
之后添加其他日志记录case message: Array[Byte] =>
看到这个。现在,如果count
小于50000,您的代码不会对此消息显示任何明显的反应,那么您怎么知道"该演员没有执行它的接收功能"