如何设置Akka演员只在特定时间段内运行?

时间:2014-10-22 02:15:00

标签: scala akka actor

我有一项重大任务,我将其分解为更小的任务并进行分析。我有一个基本的模型。

主人,工人和听众。

Master创建任务,将它们交给工人演员。一旦工作者完成,它就会要求主人执行另一项任务。完成所有任务后,他们会通知听众。他们通常需要不到2分钟的时间来完成1000项任务。

现在,有些时候某些任务所花费的时间可能比其他任务更多。 我想为每个任务设置计时器,如果任务需要更多时间,那么工作人员任务应该由主服务器中止,并且必须在以后重新提交任务作为新任务。如何实现这一点?我可以计算一个工人任务所花费的时间,但是主人如何实时保持所有工人演员的准时工作时间?

1 个答案:

答案 0 :(得分:0)

处理此问题的一种方法是,每个工作人员在收到要启动的任务后,在更改状态以处理任务之前设置超时,例如:

  context.setReceiveTimeout(5 minutes)  // for the '5 minutes' notation - import scala.concurrent.duration._

如果收到超时,工作人员可以中止任务(或您认为合适的任何其他操作 - 例如,自杀,或将通知消息传递给主人)。如果任务完成等,请不要忘记取消超时(设置持续时间= Duration.Undefined)。