7

我在 Play Framework 中使用 Akka 而不是 Job,来安排代码每 X 秒运行一次。我有一种集群(在 Heroku 上运行,目前在 1 dyno 上,但偶尔可能会有一些并发实例)。

有没有一种简单的方法可以让“作业”在整个集群中每 N 秒全局运行一次?我知道 Quartz 支持进程外存储/同步机制,例如数据库 - 我可以在 Scala 中使用类似的东西吗?

这是在播放开始时运行的演员设置:

object Global extends GlobalSettings {

  override def onStart(app: Application) {
    val monitorActor = Akka.system.actorOf(Props[MonitorLoadJob], name = "monitorLoad")
    Akka.system.scheduler.schedule(0 seconds, 10 seconds, monitorActor, Tick)
  }
}
4

3 回答 3

9

退房ClusterSingletonManager

对于某些用例,确保您在集群中的某处运行特定类型的特定参与者是很方便的,有时也是强制性的。

一些例子:

  • 对某些集群范围内的一致决策或跨集群系统的行动协调的单点责任

它需要运行 Akka Cluster,但它是为这种类型的场景而设计的。

于 2013-04-01T19:06:45.973 回答
0

一种可能的方法是在每个节点上运行一个参与者,等待通知消息启动此作业,然后从调度程序将消息广播给这些参与者。

于 2013-03-31T08:31:12.673 回答
0

或者,您可以使用worker专用于您的工作的测功机,使用标准main方法使用 Akka 安排您的工作。

您可以查看此链接(对于 Java,但您会了解 Scala)。

于 2013-03-31T09:43:14.697 回答