我只是关注akka样本但无法运行该程序.
我该怎么做才能运行该程序?
这是我的代码
build.sbt
name := "My Project"
version := "1.0"
scalaVersion := "2.10.2"
resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"
libraryDependencies +=
"com.typesafe.akka" %% "akka-actor" % "2.2.1"
Run Code Online (Sandbox Code Playgroud)
Hello.scala
import akka.actor.Actor
import akka.actor.Props
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)
}
}
object Greeter {
case object Greet
case object Done
}
class Greeter extends Actor {
def receive = {
case Greeter.Greet ?
println("Hello World!")
sender ! Greeter.Done
}
}
Run Code Online (Sandbox Code Playgroud)
小智 13
sbt具有run-main
从命令行接受主类的命令,因此完整命令是
sbt "run-main akka.Main HelloWorld"
Run Code Online (Sandbox Code Playgroud)
sbt run查找"主"类,即具有def main(args: Array[String])
或扩展特征的类App
.由于那不能是一个actor,你需要启动一个系统并使用它来启动HelloWorld,所以类似于:
class HelloWorldMain {
def main(args: Array[String]) {
import akka.actor.ActorSystem
val system = ActorSystem("HelloWorld")
val helloWorldActor = system.actorOf(Props[HelloWorld] ...)
// ... Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
由于系统只运行直到你关闭它们,如果你想要你的主类停止你要么必须使用期货通过akka.pattern.ask
并且在你收集它们之后系统终止或者设置一个单独的收割者演员来为你杀死系统. 这篇文章有关于如何做到这一点的更多信息,这个拉取请求是一个很好的例子,它在实践中看起来如何(并且还有一些其他有用的东西)