Akka Documentation
チュートリアルとの差分で、Core Featuresには他にどんな機能があるか、メモ程度に書き出しておきます。詳しくは原文をっ
割愛。新しい情報としては、次の2つあたり。
・メッセージ送信時にFutureを取得する方法
・Actorの内部ロジックを動的に変更するHotSwap
普通のActorの書き方
class MyActor extends Actor {
def receive = {
case event: ChatMessage => ()
case _ => ()
}
}
ではなく、POJO的なインターフェースを定義してActorを生成・実行する方法。
trait SomeService{
def post(event:ChatMessage):Unit
}
class SomeServiceImpl extends TypedActor
with SomeService{
}
内部ではAspectWerkzによるAOPを使っている。
たしかにActorの記述方式では、仕様が大きくなるとスパゲッティー化してしまう恐れがあるので、各メッセージングをドキュメント(ScalaDocや設計書)化したい場合などに便利そうです。
Actorのレジストリオブジェクト。各Actor参照の取得や一括管理ができる。
Actorの起動・停止時に自動的にActorRegistryの内容が更新されるが、明示的に登録・削除もできる。また、レジストリの内容変更をListen(Observe)することもできる。
Clojureからいただいた機能で、内部に可変領域を持つ特殊なActor。可変領域の更新は関数(Action)をsendすることによって行う。
共有メモリ(Java Heap)上でトランザクション(begin/commit/rollback)を行うしくみ。
ActorとSTMの機能を統合したAPI
リモートActorの作り方、呼び出し方、API詳細。
リモートに渡すメッセージのシリアライゼーションの仕方にもいろいろある。> Scala JSON/Protobuf/SBinary
Supervisorと監視対象Actorの作り方、API詳細。
スレッド生成を調整してパフォーマンスを最適化するためのAPI。
Actor毎に、キューサイズやスレッドプール数などを変更できる。
Actorやメッセージをシリアライゼーションする方法いろいろ。
■Dispatcher
メッセージによって他のActorに処理を振り分けるActor
(※上記のスレッド調整Dispatcherとは別物)
■LoadBalancer
順番に複数Actorに処理を振り分けるActor
などがある。
他に、Add-On Modules、External Sample Projectsあたりに情報・サンプルコードがたくさん。GitHubで"akka"を検索してもいいですね。
Play!FrameworkのAkkaモジュールも良さそうです。
http://implicit.ly/akka-module-for-the-play-framework
以上、ざっとAkkaで何できそうかの調査終わり、ちょっと飽きた!
あとは何かモノ作ってみてですねー。