Scala 如何跨多个流程安排全局周期Akka作业?
我使用Akka-in-Play框架而不是作业来安排代码每X秒运行一次。我有一种集群(运行在Heroku上,目前运行在1 dyno上,但偶尔会有一些并发实例) 是否有一种简单的方法可以使“作业”在整个集群中每N秒全局运行一次?我知道Quartz支持进程外存储/同步机制,例如DB-我可以在Scala中使用类似的功能吗 这是在播放开始时运行的演员设置: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
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的副本-不完全是。我特别问了关于阿克卡的问题(虽然是在游戏中,但仍然是一个阿克卡问题)