【发布时间】:2015-09-11 07:44:44
【问题描述】:
我正在尝试从子角色到父角色捕获“终止信号”,但是在死信消息池中,信号无法到达父角色的队列。 解决此问题的最佳方法是什么?
这是我正在处理的 sn-p 代码:
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
}
}
这里永远不会调用“终止(矿工)”案例。相反,在标准输出上,我看到很多从 Master 发送到 Miner 的死信消息(这是一种预期的矿工演员停止)。但是如何在 Event 总线上对 Terminate 信号进行优先级排序,以便到达 Master Actor?
如果我将 while 循环限制为大约 200 个而不是无穷大,则在 100 个死信消息之后,我会收到打印“矿工终止!!”的终止信号。但是当while循环无限大时如何实现呢?
我是 Scala/Akka 编程的新手,我的主要目标是成功运行 '//some task' 100 次,然后退出整个程序。这是完成这项任务的好方法吗?
【问题讨论】: