如何在多个流程中安排全球期间的Akka工作?

rip*_*234 7 scala quartz-scheduler akka playframework playframework-2.1

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

是否有一种简单的方法可以在整个群集中每隔N秒运行一次"作业"?我知道Quartz支持进程外存储/同步机制,例如DB - 我可以在Scala中使用类似的东西吗?

这是在Play start上运行的actor设置:

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)
  }
}
Run Code Online (Sandbox Code Playgroud)

sou*_*ica 9

退房ClusterSingletonManager.

对于某些用例,它很方便,有时也是强制性的,以确保您只有一个特定类型的actor在集群中的某个位置运行.

一些例子:

  • 单个集群范围内的一致决策或整个集群系统中的操作协调的单一责任点

它需要运行Akka Cluster,但它是针对这种情况而制作的.