16.3.3 Actor 的 HelloWorld
步骤1: 添加 Akka 依赖
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor_2.11</artifactId>
<version>2.5.19</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-remote_2.11</artifactId>
<version>2.5.19</version>
</dependency>
步骤2: 创建文件HelloAkka.scala
package com.atguigu.akka
import akka.actor.{Actor, ActorRef, ActorSystem, Props, Status}
class HelloAkka extends Actor {
override def receive: Receive = {
{
case "Hello" => {
println("收到 Hello 消息")
}
case "ok" => {
println("收到 ok 消息")
}
case _ => println("收到未知消息")
}
}
}
object HelloAkka{
private val actorFactory: ActorSystem = ActorSystem("actorFactory")
private val helloAkkaRef: ActorRef = actorFactory.actorOf(Props[HelloAkka], "helloAkka")
def main(args: Array[String]): Unit = {
helloAkkaRef ! "Hello"
helloAkkaRef ! "ok"
helloAkkaRef ! "hehe"
}
}
说明:
private val actorFactory: ActorSystem = ActorSystem("actorFactory"): 这行代码创建一个ActorSystem, 也是Actor的 Context, 所有的Actor都是ActorSystem的 child.actorFactory.actorOf(Props[HelloAkka], "helloAkka")创建一个Actor(使用反射的方式),"helloAkka"是给创建的 Actor 的命名. 并返回创建的Actor的ActorRefhelloAkkaRef ! "Hello": 使用helloAkkaRef来发送信息. 把"Hello"发送到helloAkkaRef的MailBox会在底层创建
Dispather Message,是一个线程池,用于分发消息, 消息是发送到对应的Actor的 MailBox会在底层创建
HelloActor的MailBox对象,该对象是一个队列,可接收Dispatcher Message发送的消息MailBox实现了Runnable接口, 是一个线程, 一直运行并调用Actor的receive方法, 因此当Dispather发送消息到MailBox时,在Actor的receive方法就可以得到信息.
