Akka學習筆記(一):創建Hello World工程
Akka學習筆記(一):創建Hello World工程
創建工程
使用IDEA,創建SBT工程,在build.sbt中添加akka依賴:
name := "My Project"
version := "1.0"
scalaVersion := "2.10.4"
resolvers += "Typesafe Repository" at "https://repo.typesafe.com/typesafe/releases/"
libraryDependencies +=
"com.typesafe.akka" %% "akka-actor" % "2.3.4"
如果SBT版本低於0.12,需要更改依賴為:
libraryDependencies +=
"com.typesafe.akka" % "akka-actor_2.10" % "2.3.4"
其他IDE,構建方式,請看here
Hello World
完整代碼可以在這裏下載
HelloWorld.scala
我們創建HelloWorld.scala,代碼如下:
class HelloWorld extends Actor {
override def preStart(): Unit = {
// create the greeter actor
val greeter = context.actorOf(Props[Greeter], "greeter")
// tell it to perform the greeting
greeter ! Greeter.Greet
}
def receive = {
// when the greeter is done, stop this actor and with it the application
case Greeter.Done => context.stop(self)
}
}
HelloWorld是我們這個應用的中心(main),它會啟動和關閉所有actor(Greeter)
Greeter.scala
object Greeter {
case object Greet
case object Done
}
class Greeter extends Actor {
def receive = {
case Greeter.Greet =>
println("Hello World!")
sender() ! Greeter.Done
}
}
Greeter的內容很簡單,一旦它被創建,等待接受消息,打印Hello World!,並告訴調用者Greeter.Done
Main.scala
讓我們運行這個程序吧,很簡單,指定負責調度的Actor:HelloWorld就可以了:
object Main {
def main(args: Array[String]): Unit = {
akka.Main.main(Array(classOf[HelloWorld].getName))
}
}
運行:
Hello World!
[INFO] [07/25/2014 15:11:43.147] [Main-akka.actor.default-dispatcher-4] [akka://Main/user/app-terminator] application supervisor has terminated, shutting down
如何發布和使用Akka程序
有兩種方式:
- 當做jar包使用
- 作為單獨的服務,使用Akka Microkernel,詳見here
Akka Microkernel
大致就是,把依賴包放到lib/*,通過啟動類如(HelloKernel)啟動:
bin/akka sample.kernel.hello.HelloKernel
helloKernel代碼如下:
package sample.kernel.hello
import akka.actor.{ Actor, ActorSystem, Props }
import akka.kernel.Bootable
case object Start
class HelloActor extends Actor {
val worldActor = context.actorOf(Props[WorldActor])
def receive = {
case Start => worldActor ! "Hello"
case message: String =>
println("Received message '%s'" format message)
}
}
class WorldActor extends Actor {
def receive = {
case message: String => sender() ! (message.toUpperCase + " world!")
}
}
//啟動類,需要繼承Bootable
class HelloKernel extends Bootable {
val system = ActorSystem("hellokernel")
def startup = {
system.actorOf(Props[HelloActor]) ! Start
}
def shutdown = {
system.shutdown()
}
}
最後更新:2017-04-03 05:39:33