Akka事はじめ
こんにちは。
前回でAkka-Streamsのソースを確認していましたが、
そもそものScalaとAkka自体に対する前提知識が不足しているため、
見事にはまってしまった感じでした^^;
なので、何度かScalaを用いたAkkaの小さなアプリを作成し、
そこから広げていこうと思います。
1. Akka開発用プロジェクトの作成
まずは、Akka開発用プロジェクトの作成を行います。
ひな形となるsbt定義ファイルは下記のURLから取得します。
https://github.com/akka/akka/tree/master/akka-samples/akka-sample-main-scala
プロジェクトルートに下記の内容のbuild.sbtを作成し、IntelliJ IDEAでインポートします。
簡単に構築が完了するあたり、IntelliJ IDEAが使いやすい点ではありますね。
■build.sbt
name := "akka-exercise" version := "0.1-SNAPSHOT" scalaVersion := "2.10.4" resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/" libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % "2.3.4" )
2. Akka用Hello Worldコードの作成
インポートが完了したら下記のコードを作成します。
各行のコメントはとりあえず理解用です。
■HelloWorldActor.scala
package com.github.kimutansk.akka.exercise import akka.actor.Actor /** * Akka Actor用のHello Worldクラス * 受け取った内容の頭にメッセージを付与してコンソールに出力する。 * * @author kimutansk */ class HelloWorldActor extends Actor { override def receive: Actor.Receive = { case x => println("Hello world! " + x) // 何か受信したら頭にメッセージを付与してコンソール出力 } }
■HelloWorldApp.scala
package com.github.kimutansk.akka.exercise import akka.actor.{ActorSystem, Props} /** * Akka Actor用のHello World起動クラス * * @author kimutansk */ object HelloWorldApp extends App { override def main(args: Array[String]): Unit = { val system = ActorSystem.apply("HelloWorldApp") // AkkaActorSystemを生成 val helloWorldActor = system.actorOf(Props.apply[HelloWorldActor], "HelloWorldActor") // 空設定でHelloWorldActorを生成 helloWorldActor ! """Test1""" // HelloWorldActorに"Test1"というメッセージを渡す helloWorldActor ! """Test2""" // HelloWorldActorに"Test2"というメッセージを渡す system.shutdown() // AkkaActorSystemを終了 } }
上記のコードを作成して実行すると下記の結果が得られます。
Hello world! Test1 Hello world! Test2
HelloWorldActor自体は元々のScalaのActorと比べると記述については若干単純になった位ですが、
ActorSystemから設定を投入して生成出来たり、Systemに連動して起動終了出来るあたりが便利になっていますね。
・・・とはいえ、これだけの単純な例ですと実際の所何が嬉しいかはわからないと思います。
次回以降もう少し複雑なパターンをやっていこうと思います。