scala akka actor的入門(1)__scala

來源:互聯網
上載者:User
例子
//#full-exampleimport akka.actor.{Actor, ActorRef, ActorSystem, Props}//#greeter-companion//#greeter-messagesobject Greeter {  //#greeter-messages  def props(message: String, printerActor: ActorRef): Props = Props(new Greeter(message, printerActor))  //#greeter-messages  final case class WhoToGreet(who: String)  case object Greet}//#greeter-messages//#greeter-companion//#greeter-actorclass Greeter(message: String, printerActor: ActorRef) extends Actor {  import Greeter._  import Printer._  var greeting = ""  def receive = {    case WhoToGreet(who) =>      greeting = s"$message, $who"    case Greet           =>      //#greeter-send-message      printerActor ! Greeting(greeting)      //#greeter-send-message  }}//#greeter-actor//#printer-companion//#printer-messagesobject Printer {  //#printer-messages  def props: Props = Props[Printer]  //#printer-messages  final case class Greeting(greeting: String)}//#printer-messages//#printer-companion//#printer-actorclass Printer extends Actor {  import Printer._  def receive = {    case Greeting(greeting) =>      println(s"Greeting received (from ${sender}): $greeting")  }}//#printer-actor//#main-classobject AkkaQuickstart extends App {  import Greeter._  // Create the 'helloAkka' actor system  val system: ActorSystem = ActorSystem("helloAkka")  //#create-actors  // Create the printer actor  val printer: ActorRef = system.actorOf(Printer.props, "printerActor")  // Create the 'greeter' actors  val howdyGreeter: ActorRef =    system.actorOf(Greeter.props("Howdy", printer), "howdyGreeter")  val helloGreeter: ActorRef =    system.actorOf(Greeter.props("Hello", printer), "helloGreeter")  val goodDayGreeter: ActorRef =    system.actorOf(Greeter.props("Good day", printer), "goodDayGreeter")  //#create-actors  //#main-send-messages  howdyGreeter ! WhoToGreet("Akka")  howdyGreeter ! Greet  howdyGreeter ! WhoToGreet("Lightbend")  howdyGreeter ! Greet  helloGreeter ! WhoToGreet("Scala")  helloGreeter ! Greet  goodDayGreeter ! WhoToGreet("Play")  goodDayGreeter ! Greet  //#main-send-messages}//#main-class//#full-example
解析

1.props 方法返回Props 執行個體,用於建立actor
2.

class Greeter(message: String, printerActor: ActorRef) extends Actor {  import Greeter._  import Printer._  var greeting = ""  def receive = {    case WhoToGreet(who) =>      greeting = s"$message, $who"    case Greet           =>      printerActor ! Greeting(greeting)  }}

WhoToGreet 修改actor自身的狀態,Greet把greeting發送給printerActor
3.ActorRef是actor的引用
4.akka.actor.ActorSystem 是actor建立工廠
建立printer actor

val printer: ActorRef = system.actorOf(Printer.props, “printerActor”)

5.actorRef 發送訊息用 ! actor 發送訊息是非同步。 一個actor不做任何事情直到接受到訊息

howdyGreeter ! WhoToGreet(“Akka”)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.