Allied ArchitectsAllied ArchitectsEngineer Blog

Play Framework(Play2)(Scala)のTips Part3:Akkaを使った非同期/バッチ処理(Advent Calendar 20日目)

2014/12/20 Scala

この記事はアライドアーキテクツAdvent Calendar 20日目の記事です。

どうも。伊藤(係長)です。
今日は他の方に乗っ取られる事もなく無事に書くことができます。
今回はAkkaを使った非同期処理やバッチ処理についてです。

通常、非同期処理をJavaとかで書こうと思ったら、ちょっとメンドクサイですよね。
ところがAkkaを使えば比較的簡単に書く事ができるのです。
※私自身がこの辺の処理が苦手なので、深いところまでは全く踏み込みません。
(というか踏み込めません)

■Akkaとは
Actorによる並列処理を行う為のライブラリ。
ScalaとJavaのAPIがあり、並列処理、分散処理を簡単に記述する事が可能です。
詳しくはAkkaをご覧ください。

単純な非同期処理

事前準備

Playに最初から組み込まれている為、特に必要ありません。

実装サンプル

Akka.system.schedulerを使います。

これだけです。これだけでOk(“hoge”)が先に実行されてView側に結果を返し、
裏ではdoAsyncが1秒後に実行されます。すごい簡単ですね。
doSomethingの処理のうち、何か二次的な処理を裏でこっそりさせたい場合などに有効かと思います。
ちなみに、コード内の”1.seconds”部分は、
“2.minutes”(2分後)、”3.hours(3時間後)”など色々指定が可能です。

定期的なバッチ処理

30分おきに実行させたい処理、日次で実行させたい処理などを想定します。
ここでは、akka-quartz-schedulerを使います。
これは、予め設定しておいたスケジュールに基いてActorを起動する事ができるプラグインです。

事前準備

build.sbtに依存を追加する

build.sbt

※Play2.2環境下の設定です。適宜変更してください。

実装サンプル

1.application.confにスケジュールを設定する
application.conf

※詳しい設定方法はここをどうぞ。

2.スケジュールを登録する
GlobalSettingsを継承したGlobal.scalaを作成して、1.で設定したファイルを読み込んでスケジュールを登録する処理を書きます。

Global.scala

設定ファイルから情報を読み込んで、動的にActorを生成してスケジューリングしています。
(※ここでは”SampleActor1″、”SampleActor2″クラスが生成されます)

3.Actorのベースを書く
ActorBase.scala

4.メイン処理のActorを書く
SampleActor1.scala

この時のクラス名はapplication.confに設定したActorクラス名と一致させる必要があります。

以上の実装でスケジューリングした通りに勝手にActorが起動、実行されます。
割りと簡単に書けますよね。
※SampleActor2は割愛します。

明日は、最近さらに乗りに乗っているGit大佐こと大佐の番です!!!

  • cobonas
  • プログラマ
  • 元Javaプログラマ。現在はScala/PlayでWeb開発と、SwiftでiOSアプリ開発をしています。 Unitテストとか書いてる時が一番楽しかったりします。

RELATION ENTRY

Play Framework(Play2)(Scala)のTips Part2:Specs2とMockitoでテストを書く(Advent Calendar 8日目)

Play Framework(Play2...

2014/12/8 Scala

この記事はアライドアーキテクツAdvent Calendar 8日目の記事です。 どうも。謎の刺客Tarou Yamadaさんにカレンダーを乗っ取られてしまった伊藤(係長)です。 気を取り直して、今回はSpecs2とMockitoを使ったユニットテストのお話を書きます。 ■Specs2とは ...

続きを読む

Play Framework(Play2)(Scala)のTips Part1:フォームのマッピングあれこれ

Play Framework(Play2...

2014/06/4 Scala

お久しぶりです。伊藤(係長)です。 最近、PHPでの開発を一旦休業しまして、ScalaでPlayFramework(Play2)を 使ったWebアプリの開発を始めました。 というわけで今後は主にPlay2とかScalaとかの記事を書いていこうと思います。 最初は初級編という事で、Co...

続きを読む

cobonasの記事一覧へ

ページTOPへ