Я пытаюсь поймать «Terminate Signal» от дочернего к родительскому актеру, однако среди пула сообщений о недопустимых сообщениях сигнал не попадает в очередь родительского актера. Каков наилучший способ решить эту проблему?Как определить приоритеты сообщений, отправленных между актерами в Scala?
Вот фрагмент кода, я работаю над:
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 to Miner (что вроде бы ожидаемо, когда актер-минер останавливается). Однако как определить приоритет сигнала Terminate на шине Event, чтобы достичь Master Actor?
Если я ограничиваю цикл while до 200 вместо бесконечности, после 100 сообщений о недоставке я получаю сигнал Terminate, который печатает «Miner Terminated !!». Но как достичь этого, когда цикл находится в бесконечности?
Я новичок в программировании Scala/Akka, моя главная цель - запустить «// some task» за 100 успешных времен, а затем выйти из всей программы. Это хороший способ достичь этой задачи?
это сработало! спасибо за отображение «вперед». – snackbar