创建Actor有三种方式
第一种:使用默认构造函数创建
object Example_AKKA_1{
import akka.actor.Actor
import akka.actor.Props
import akka.event.Logging
import akka.actor.ActorSystem
//定义自己的Actor,通过extends Actor并实现receive方法进行定义
class StringActor extends Actor{
val log = Logging(context.system,this)
def receive = {
case s:String => log.info("received message:"+s)
case _ => log.info("received unknown message")
}
}
def main(args:Array[String]){
//创建ActorSystem,ActorSystem为创建和查找Actor的入口
//ActorSystem管理Actor共享配置信息如分发器(dispatchers)、部署(deployments)等
val system = ActorSystem("StringSystem")
//使用默认的构造函数创建Actor实例
val stringActor = system.actorOf(Props[StringActor],name = "StringActor")
//给stringActor发送字符串消息
stringActor!"Creating Actors with default constructor"
//关闭ActorSystem
//等待五秒再关闭,要不然看不到实验结果
Thread.sleep(5000)
system.shutdown()
其中代码块
//使用默认的构造函数创建Actor实例
val stringActor = system.actorOf(Props[StringActor],name = "StringActor")
包含了两个操作:1.首先使用反射方式Props[StringActor]创建了名称为“StringActor”的Actor;2.使用system.actorOf创建该“StringActor”的Actor对应的ActorRef的实例对象“stringActor”,ActorRef是一种不可变的对象且与创建的Actor具有一一对应的关系,AKKA中所有消息的发送都是经由Actor一一对应的ActorRef,而不是经由Actor本身。
AKKA中的消息发送流程示意图
网友评论