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
的ActorRef
helloAkkaRef ! "Hello"
: 使用helloAkkaRef
来发送信息. 把"Hello"
发送到helloAkkaRef
的MailBox
会在底层创建
Dispather Message
,是一个线程池,用于分发消息, 消息是发送到对应的Actor
的 MailBox会在底层创建
HelloActor
的MailBox
对象,该对象是一个队列,可接收Dispatcher Message
发送的消息MailBox
实现了Runnable
接口, 是一个线程, 一直运行并调用Actor
的receive
方法, 因此当Dispather
发送消息到MailBox
时,在Actor
的receive
方法就可以得到信息.