7

Job の代わりに Play Framework で Akka を使用して、X 秒ごとにコードを実行するようにスケジュールします。私は一種のクラスターを持っています (Heroku で実行されており、現在は 1 つの dyno で実行されていますが、同時インスタンスがいくつか存在する場合があります)。

「ジョブ」をクラスター全体でグローバルに N 秒ごとに実行する簡単な方法はありますか? Quartz が DB などのプロセス外ストレージ/同期メカニズムをサポートしていることは知っています - Scala で同様のものを使用できますか?

これは、Play の開始時に実行されるアクターのセットアップです。

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

ユースケースによっては、クラスター内のどこかで実行されている特定のタイプのアクターを 1 つだけ確保することが便利であり、場合によっては必須でもあります。

いくつかの例:

  • 特定のクラスタ全体で一貫した決定、またはクラスタ システム全体でのアクションの調整に対する単一の責任

Akka Cluster を実行する必要がありますが、このタイプのシナリオ用に作成されています。

于 2013-04-01T19:06:45.973 に答える
0

考えられる 1 つの方法は、各ノードでアクターを実行し、通知メッセージがこのジョブを開始するのを待ち、スケジューラーからこれらのアクターにメッセージをブロードキャストすることです。

于 2013-03-31T08:31:12.673 に答える
0

または、Akka でジョブをスケジュールするworker標準的な方法を使用して、ジョブ専用の dynoを使用することもできます。main

このリンクを確認できます(Java の場合ですが、Scala のアイデアが得られます)。

于 2013-03-31T09:43:14.697 に答える