如何确定Scala中actor之间发送的消息的优先级?

时间:2015-09-11 07:44:44

标签: scala akka actor

我正试图从子节点到父节点捕获'终止信号',但是在死信消息池中,信号无法到达父节点的队列。 解决这个问题的最佳方法是什么?

以下是我正在处理的代码段:

class MinerActor extends Actor {
   var count:Int = 0
   def receive = {
       case Mine =>
            //some task here     
            //if success
               count = count + 1
            //
            if (count >= 100) 
            {
                context.stop(self) 
            }
}

class MasterActor extends Actor {
    val miner = context.actorOf(Props(new MinerActor,name = "miner")
    context.watch(miner)

    def receive = {
      case Foo => 
            while (true) {
              miner ! Mine
            }

      case Terminated(miner) =>
            println("Miner Terminated!!")
            context.stop(self)
            context.system.shutdown
    }
}

这里'终止(矿工)'的情况永远不会被调用。相反,在stdout上,我看到很多从Master到Miner发送的死信信息(当矿工被停止时,这是预期的)。但是如何优先处理事件总线上的Terminate信号以便到达Master Actor?

如果我将while循环限制为大约200而不是无穷大,在100个死信消息之后,我收到终止信号,打印出“Miner Terminated !!”。但是当while循环处于无穷大时如何实现呢?

我是Scala / Akka编程的新手,我的主要目标是成功运行'// some task',然后退出整个程序。这是实现这项任务的好方法吗?

0 个答案:

没有答案