読者です 読者をやめる 読者になる 読者になる

/var/log/laughingman7743.log

I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?

Playframework2.4でActorをスケジューリングする

Playframework Scala

Play2.4でActorをスケジューリングするサンプルです。 オフィシャルドキュメント*1に少しスケジューリングの記載がありますが、 実際どうやってスケジューリング設定をするのか分かりにくかったので、簡単なサンプルを実装してみました。
基本的にPlay2.4から導入されたランタイムDIの仕組みを使う形です。

スケジューリングするActorは、とりあえず以下のようにメッセージを受け取ったら「Hello world!」をログ出力するだけの単純なもの。

DIできるようにモジュール化しておきます。

スケジューラーは以下のようにランタイムDIを利用して、ApplicationLifeCycleやActorSystem、スケジューリングしたいActorをコンストラクタで受け取り、 クラス初期化時にスケジューリング設定をする形です。スケジューリングしたいActorはモジュール化時に引数で指定した名前を@Namedアノテーションで指定します。

スケジューラ自体もモジュール化して、モジュール初期化時にインスタンスを生成してスケジュール設定を行う形なので、@Singletonアノテーションを付けてシングルトン実装となるようにしておきます。

スケジューラのモジュールは以下のように、モジュール初期化時にEagerlyでインスタンスを生成します。

application.confに2つのモジュールを有効にする設定を追加します。

APサーバ単位で定期的に何かさせたい場合に。

Enjoy!