Scala 如何跨多个流程安排全局周期Akka作业?

Scala 如何跨多个流程安排全局周期Akka作业?,scala,playframework,quartz-scheduler,akka,playframework-2.1,Scala,Playframework,Quartz Scheduler,Akka,Playframework 2.1,我使用Akka-in-Play框架而不是作业来安排代码每X秒运行一次。我有一种集群(运行在Heroku上,目前运行在1 dyno上,但偶尔会有一些并发实例) 是否有一种简单的方法可以使“作业”在整个集群中每N秒全局运行一次?我知道Quartz支持进程外存储/同步机制,例如DB-我可以在Scala中使用类似的功能吗 这是在播放开始时运行的演员设置: object Global extends GlobalSettings { override def onStart(app: Applica

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

是否有一种简单的方法可以使“作业”在整个集群中每N秒全局运行一次?我知道Quartz支持进程外存储/同步机制,例如DB-我可以在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)
  }
}

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

或者您可以使用一个专用于您的作业的
工作者
dyno,使用标准的
main
方法使用Akka安排您的作业

您可以查看(Java,但您会了解Scala的概念)。

请查看

对于某些用例,它是方便的,有时也是强制性的 确保只有一个特定类型的参与者正在运行 在集群的某个地方

一些例子:

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

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

我希望解决方案不是针对heroku的-我们目前正在用Herkou测试水域,不希望增加锁定。啊,好的。因此,您需要使用一些Akka远程参与者,并找到一种在某处存储状态的方法。可能是@Schleichardt的副本-不完全是。我特别问了关于阿克卡的问题(虽然是在游戏中,但仍然是一个阿克卡问题)