Scala

Scala の Akka で Hello World をしてみました.

スレッドとはちょっと違う、Actor モデルの初体験!

Akka とは

Akka とは、Scala で Actor モデルベースの平行処理を書くときの、 デファクトスタンダードなライブラリだ.

Hello Akka!!

ソース

以下のファイルを src/main/scala/HelloScala.scala に作成.

import akka.actor.Actor
import akka.actor.ActorSystem
import akka.actor.Props

class HelloActor extends Actor {
  def receive = {
    case "hello" => println("World!")
  }
}

object Main extends App {
  // デフォルトの Actor を作成
  val system = ActorSystem("HelloSystem")

  print("Hello, ")

  // 送信先 Actor を作成
  val helloActor = system.actorOf(Props[HelloActor], name = "helloactor")

  // メッセージ送信
  helloActor ! "hello"
}

build.sbt 作成

以下の build.sbt ファイルを作成

name := "My Project"

version := "1.0"

scalaVersion := "2.10.0"

resolvers += "Typesafe Repository" at "https://repo.typesafe.com/typesafe/releases/"

libraryDependencies += "com.typesafe.akka" % "akka-actor_2.10" % "2.2-M1"

実行

コンソールより実行

> sbt run

[info] Running Main 
Hello, World!

返信ありのケース

sender を利用して、折り返し処理を実施.

import akka.actor.Actor
import akka.actor.Props
import akka.actor.ActorSystem

class HelloActor extends Actor {
  def receive = {
    case "introduce" => 
      print(",")
      sender ! "world"
  }
}

class CounterMain extends Actor {
  val system = context.actorOf(Props[HelloActor], "hellocounter")

  print("Hello")
  system ! "introduce"

   def receive = {
     case "world" =>
       println(" World!!")
       context.stop(self)
   }
}

object Main extends App {
  val system = ActorSystem("HelloSystem")
  val actor = system.actorOf(Props[CounterMain], name = "counterMain")
}

参考