2013年9月26日木曜日

Play FrameworkでAkka schedulerがうまく動作しなかった件

Playで定期実行する処理を書くときには
にあるように簡単に書くことができます。

Akka.system().scheduler().schedule(
  Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay 0 milliseconds
  Duration.create(30, TimeUnit.MINUTES),     //Frequency 30 minutes
  testActor,
  "tick",
  Akka.system().dispatcher()
);

ここにある例を参考に自分でも定期実行する処理を書いてみたのですが、どうやら上手く動いていなかった様子。

上手く動かなかったケース
Akka.system()
.scheduler()
.schedule(Duration.create(0, TimeUnit.SECONDS),
Duration.create(15, TimeUnit.MINUTES), getAnalyze,
Akka.system().dispatcher());

動くように修正したケース

Akka.system()
.scheduler()
.schedule(Duration.create(1, TimeUnit.SECONDS),
Duration.create(300, TimeUnit.SECONDS), getAnalyze,
Akka.system().dispatcher());

もともと下のパターンは動いていたので、バグなのか分単位だと動作しない仕様なのかよくわかりませんが、とりあえず動くようになりました。
Akka.system()
.scheduler()
.schedule(Duration.create(0, TimeUnit.SECONDS),
Duration.create(1, TimeUnit.HOURS), getFeed,
Akka.system().dispatcher());

0 件のコメント:

コメントを投稿