我正试图从子节点到父节点捕获'终止信号',但是在死信消息池中,信号无法到达父节点的队列。 解决这个问题的最佳方法是什么?
以下是我正在处理的代码段:
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',然后退出整个程序。这是实现这项任务的好方法吗?