§Akka の統合
Akka は、アクター・モデルに基づいて、これまでより高い抽象度で、並列かつスケーラブルなアプリケーションを実装するためのプラットフォームです。Akka は耐障害性を実現するために ‘Let it crash’ モデルを採用しています。これは、自己修復するアプリケーション、言い換えれば落ちないシステムを必要としていた通信業界で大きな成功を収めているモデルです。アクターは分散処理を意識せずに実現できるような抽象化を提供する一方で、スケーラブルかつ耐障害性のアプリケーションを実装するベースにもなります。
§アプリケーションのアクターシステム
Akka 2.0 は アクターシステム
と呼ばれるいくつかのコンテナを持ちます。それぞれのアクターシステムは、それに含まれるアクターを動かすためのリソースを管理します。
Play アプリケーションには、アプリケーション自身が使う特別なアクターシステムが定義されています。このアクターシステムはアプリケーションのライフサイクルに追従し、アプリケーションと共に自動的に再起動します。
Note: 独自のアクターシステムを利用しても全く問題ありません。デフォルトのアクターシステムは、実行するアクターの数が少なく、別のアクター・システムを自分で用意するまでもないような場合に利用するとよいでしょう。
アプリケーションのデフォルトのアクターシステムを利用するためには、play.api.libs.concurrent.Akka
ヘルパーを利用します。
val myActor = Akka.system.actorOf(Props[MyActor], name = "myactor")
§設定
デフォルトのアクターシステムの設定は、Play アプリケーションの設定ファイルから読み込まれます。例えば、アプリケーションのアクターシステムのデフォルトディスパッチャを変更したい場合は、 conf/application.conf
ファイルにその設定を数行追加します。
akka.default-dispatcher.fork-join-executor.pool-size-max =64
akka.actor.debug.receive = on
Note: Akka の規約に基づいて設定ファイルにトップの設定キーを記述することで、同じファイル内で全く別のアクターシステムを構成することもできます。
§非同期タスクのスケジューリング
Akka では、アクターへのメッセージ送信やタスク(関数または Runnable
)の実行を予約することができます。予約を行うと、結果として Cancellable
のインスタンスが返ってきます。その cancel
メソッドを呼び出すことで、予約した操作の実行をキャンセルすることができます。
例えば、testActor
に 30 分おきにメッセージを送信する場合は次のように書きます。
import play.api.libs.concurrent.Execution.Implicits._
Akka.system.scheduler.schedule(0.seconds, 30.minutes, testActor, "tick")
Note: この例では
scala.concurrent.duration
に定義されている implicit conversion を利用して、数値を時間単位の異なるDuration
オブジェクトへ変換しています。
同様に、コード・ブロックを今から 10 秒後に実行するには、次のように書きます。
import play.api.libs.concurrent.Execution.Implicits._
Akka.system.scheduler.scheduleOnce(10.seconds) {
file.delete()
}
次ページ: 多言語対応