Upload
saaaaaaki
View
3.966
Download
0
Embed Size (px)
Citation preview
この本について
Developing an Akka Edge(著)Thomas Lockney, Raymond Tay
Akka初心者向けの洋書全191ページ・10章
せっかく読んでるので要約しました※自分で調べた事や、考えた例も載せたのでスライドに正しくないことが書いてある可能性があります※
各章の概要
Chapter 1…ロックを使った並列処理がよくない理由アクターの概要
Chapter 2…とりあえずAkkaを動かしてみる
Chapter 3…ビルドツールの紹介 & ログの出し方など
Akkaを触った事がある人はChapter4からでいいかも
スレッドが増えると待ち時間が無限に…
例「Webサイトにユーザーが訪れたらカウントする」
合計値を更新するメソッド
スレッド
スレッド
スレッドスレッド
スレッド
スレッド スレッド
スレッド
スレッド
スレッド
スレッド
使用中なら待つ
メッセージを受け取った時の処理を定義しておく
Actor
case “How are you?” => sender ! “I’m fine thank you”
case “Nice to meet you” => sender ! “Nice to meet you too”
case s:String => sender ! “Pardon?”
メッセージを受け取った時の処理を定義しておく
①アクターがメッセージを受信する
Actor
case “How are you?” => sender ! “I’m fine thank you”
case “Nice to meet you” => sender ! “Nice to meet you too”
case s:String => sender ! “Pardon?”“How are you?”
メッセージを受け取った時の処理を定義しておく
①アクターがメッセージを受信する
②定義されたふるまいをする
Actor
case “How are you?” => sender ! “I’m fine thank you”
case “Nice to meet you” => sender ! “Nice to meet you too”
case s:String => sender ! “Pardon?”“How are you?”
“I’m fine thank you”
ヒエラルキー
Akkaの構造がヒエラルキーになっている理由⇒耐障害性
親アクターは子アクターにExceptionが発生した時にどうするか決められる・子アクターを再起動させる・子アクターを再開させる・子アクターを終了させる・例外を次の親に投げる
ヒエラルキー
ヒエラルキーはファイルシステム的な感じで、分かりやすい
例:accountingというActorsystemから作られたaccountMonitorというアクターから作られたaccountCrediterというアクター
akka://accounting/user/accountMonitor/accountCreditor
Akkaのアクターの特徴②
遠隔操作本当にスケーラブルな並行処理の鍵となる
アクターがどこにあっても(同じマシンでも、違うJVMのインスタンスでも、全く別のマシンでも)同じように動く
アクターのアドレスさえ知っていればローカルもリモートも関係ない⇒location transparency
Putting actors to work
アクターを使うのにまず必要な事
・akka.actor.Actorトレイトを継承したクラスと、そこにreceiveメソッドを定義・ActorSystemを作る
・ActorSystemからアクターを生成
Actorインスタンスを作って開始させるとActorRefインスタンスが取得できる*この時点でもう非同期になっている*
ActorRef…Akkaのアクターを参照する時に必ず使うオブジェクトPropf…アクターを作る時に使われる設定オブジェクト(ファクトリー的な)
アクター内部からActorSystemにアクセス
contextというプライベート変数
context.system :自分がいるのアクターシステムを参照できるcontext.stop(ref):ref(他のアクター)を停止させる
非同期に他アクターの開始・停止ができる
メッセージの送り方② ask
?メソッドはFutureを返す
Futureの中身…送り先のアクターが返す値(処理済/まだ処理されていない/永遠に処理されない)
永遠に処理されない可能性もあるので、implicit valを使って時間を設定
アクターへ送るメッセージは非同期なので、アクター以外のコード内でレスポンスを得るにはFutureを使う必要がある
The sbt build defenition
AntやRave⇒ビルドファイル名が指定されてるMavenやsbt⇒ディレクトリ構造が指定されてる
sbt
Scalaのコード ⇒ src/main/scala以下と src/test/scala以下設定ファイルなど ⇒ src/main/resources以下と src/test/resources以下
(設定でいろいろかえられる)
build.sbtに設定を書く…project名とか、Scalaのバージョンや依存性
*決まり事*全ての設定は空行をはさむ
:= 設定の割当
+= 既にある設定に追記(libraryDependenciesとか)
++= コレクション(Seqとか)を設定に追加する
Akka and application configuration
AkkaではActorSystemの設定に TypesafeConfig library を使っているJSONみたいな感じHOCON(Human Optimized Config Object Notation)と知られている
独自の設定は /src/main/resources/application.conf に記述する
Logging in Actors and elsewhere
Akkaのロギングは(もちろん)非同期
ロギングの方法①デフォルトのLogging機能を使う②ActorLoggingトレイトをミックスインしたものを使う
akka.actor.debug.receive = on
ミックスインしたクラスに def receive = LoggingReceive{}を定義