Akka Internals (Akkaの内部動作を知る) インストール & 最初のプログラミング
環境の準備 - Akkaを使う前にJDKとSBTを入れましょう
Akkaを使うには Akka公式のGetting Startedページ -> Prerequisitesにあるように、JDKが必要です。
AkkaはScalaからもJavaからも使えますが、Scalaを使うならSBTを入れましょう。Scalaのビルドツールとしては、SBTはデファクトスタンダードといえると思います。
プロジェクトの中身を作る
(Gitの使い方がわかる方はこちらからgit cloneしてください。)
build.sbtとproject/build.propertiesを追加
まずはこういうフォルダ構成を作っていきます。
フォルダエクスプローラから適当なフォルダを開き(特に好みのフォルダがなければ C:\Users\あなたの名前 を使うといいでしょう)
右クリック→新規作成→フォルダーから
"akka-debug"(プロジェクトのルートフォルダ)を作りましょう。
akka-debugフォルダの中に入って、同じく
-
右クリック→新規作成→フォルダー
-
右クリック→新規作成→テキストドキュメント
を使って…
さきほどのフォルダ構成ができたら、
あとはbuild.sbtとbuild.propertiesの中身を以下のように変更します。メモ帳など簡単なエディタでかまいません。
- build.sbt
lazy val root = (project in file(".")).
settings(
name := "akka-debug",
version := "1.0",
scalaVersion := "2.11.5",
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.3.14" withSources() withJavadoc()
)
- project/build.properties
sbt.version=0.13.9
main.scalaを追加
ひたすら
- 右クリック→新規作成→フォルダー
を繰り返して、頑張って以下のフォルダ構成を作ってください
出来上がったら、main.scalaの中身を以下に書き換えてください。
package com.rimaoka.sample
import akka.actor.{Actor, ActorSystem, Props}
/**
* Pretty simple actor just logging when initializing itself and receiving a message
*/
class LoggingActor extends Actor {
//Print out the current thread name!
println(Thread.currentThread().toString + " : LoggingActor is initialized")
def receive = {
//Print out the current thread name!
case message: String => println(Thread.currentThread().toString + s" : Message = $message" )
}
}
/**
* Pretty simple object, which has the main method to run
*/
object ActorDebuggerMain {
/**
* 1. Create an ActorSystem
* 2. Create an Actor (LoggingActor)
* 3. Send a message to the actor, created in 2.
* 4. Shuts down the system for proper exit
*/
def main(args: Array[String]): Unit ={
//Print out the current thread name!
println(Thread.currentThread().toString + " : ActorDebuggerMain.main() running" )
val system = ActorSystem("ActorDebuggerSystem")
val actor = system.actorOf(Props[LoggingActor])
actor ! "Message from main()"
Thread.sleep(500);
system.shutdown()
}
}
さあ、走らせましょう!!
コマンドプロンプトを開いてsbtと入力し、しばらくすると
C:\Users\rimaoka\akka-debug>sbt
...
...
「対話モード」になって、この状態でコマンドプロンプトが待ち受け状態になります
>
そこで、runと入力すればさきほどのmain.scalaを走らせることができます
> run
...
...
[info] Running ActorDebuggerMain
Thread[run-main-0,5,run-main-group-0] : ActorDebuggerMain.main() running
Thread[ActorDebuggerSystem-akka.actor.default-dispatcher-4,5,run-main-group-0] : LoggingActor is initialized
Thread[ActorDebuggerSystem-akka.actor.default-dispatcher-4,5,run-main-group-0] : Message = Message from man()
[success] Total time: 7 s, completed 2015/10/05 23:51:04
ActorDebuggerMainが以下のMainスレッドで実行され
*Thread[run-main-0,5,run-main-group-0]
LoggingActorは以下のスレッド、すなわち別スレッドで実行されていることがわかります。
*Thread[ActorDebuggerSystem-akka.actor.default-dispatcher-4,5,run-main-group-0]