Scala勉強日誌 - Akka その3 application.conf使ってみる
さてさて、続けてその3です。
前回からの続きで、AkkaActorの話です。
今日のテーマ
- configファイルを使ってみる
環境
参考
Scala - Configuration for Akka application - Qiita
Configuration — Akka Documentation
configファイルを使ってみる
クラスパスから自動的に探してくれるようなので、ルートにapplication.conf
を作ります。
前回使ったサンプルのRouterの定義をconfigに移してみたいと思います。
akka.actor.deployment { /routerTest { router = round-robin-pool nr-of-instances = 2 } }
(IntelliJIDEAでシンタックスハイライトしてくれないかなぁ...)
routerTest
という名前をつけましたrouter
はとりあえず前回と同じRoundRobinPoolになるようにnr-of-instances
はRoundRobinPoolの引数に渡す、Pool数(?)number of children to create in case of a router
と書いてあったので、childrenの数ですかね
では、これを使うコードを書いてみます。
object AkkaExample04 extends App { val system = ActorSystem() val actor = system.actorOf(Props[WeatherApi].withRouter(FromConfig), "routerTest") implicit val timeout = Timeout(10.seconds) val f1 = (actor ? 1) val f2 = (actor ? 2) val f3 = (actor ? 3) for { first <- f1 second <- f2 third <- f3 } yield { println("yeild!!") (first, second, third) match { case ((i, json1), (j, json2), (k, json3)) => print("complete") } system.shutdown } println("ここはどこ") }
ポイントは
val actor = system.actorOf(Props[WeatherApi].withRouter(FromConfig), "routerTest")
ここです。(今回はファイル名をapplication.conf
にしているので、特に設定ファイルパスの指定は不要ですが、変える場合は必要なのかな?多分)
withRouter(FromConfig)
- Router設定を設定ファイルから読み込んでくれます
"roundRobinTest"
- 設定ファイルでは
/
で始まっていましたが、ここでは/
を省略して書きます "/roundRobinRouter"
と書くと怒られます。akka.actor.InvalidActorNameException
- 設定ファイルでは
実行してみます。
[info] Running akka.sample.AkkaExample04 ここはどこ receive 2 receive 1 receive 3 yeild!! complete
2個ずつ処理されたのがわかるかと思います。
余談
先の実行結果で、「ここはどこ」が最初に出力されてます。
yeild
って非同期になるんですね。知りませんでした。
今日はここまで。