Akka学习笔记(3)-Actor
来源:互联网 发布:淘宝店铺转让可信吗 编辑:程序博客网 时间:2024/05/20 06:28
Actor是Akka中的核心概念,它为并发和分布式提供了一种更高级别的抽象,使并发编程更加容易。
创建Actor
定义Actor
定义一个Actor非常简单:继承Actor,并提供receive方法即可。
不带构造参数的Actor:
class MyActor1 extends Actor { val log = Logging(context.system, this) def receive = { case "test" => log.info("receive test") case _ => log.info("receive unkonow message") }}
带构造参数的Actor:
class MyActor2(name: String) extends Actor{ println("Actor Name:" + name) val log = Logging(context.system, this) def receive = { case "test" => log.info("receive test") case _ => log.info("receive unkonow message") }}
创建Actor
创建Actor的常见方式有两种,一种是在ActorSystem上创建Actor,另一种是在一个Actor中创建另一个Actor,构成Actor监管树。
1)在ActorSystem上创建Actor:
val system = ActorSystem("MyActorSystem")//创建不带构造参数的Actorval myActor1 = system.actorOf(Props[MyActor1], name="actor1")//创建带构造参数的Actorval myActor = system.actorOf(Props(new MyActor2("actor2")) name="actor2")
其中name参数是可选的,它指名当前Actor的名称。
2)在Actor中创建Actor
接触Actor的内置对象context来完成,该对象表示当前Actor的上下文
class FirstActor extends Actor{ def receive = { case "create" => { val actor1 = context.actorOf(Props[MyActor1]) val actor2 = context.actorOf(Props(new MyActor2("name"))); } }}
用这种方式创建的actor与当前actor构造建管树,当前actor相当于新创建的actor的父actor,可以对actor1与actor2进行生命周期监控。
Actor中常用的内置对象
在Actor中有几个常用的内置对象:
self 表示当前actor的ActorRef引用
sender 表示最近接收到的消息的发送actor,通常用该对象进行消息回复
context 表示当前actor的上下文,这个一个很有用的内置对象
- 1)用于创建子actor的工厂方法(actorOf)
context.actorOf(Props[MyActor1], name = "actor1")
- 2)获取actor所属的ActorSystem
context.system
- 3)获取父监管actor
context.parent
- 4)获取监管的所有子actor
context.children
- 声明周期监控
Actor的钩子方法
Actor提供了四个Hook方法用以对Actor的生命周期进行管理,这四个方法分别是 preStart / preRestart / postRestart / postStop,preStart方法在Actor被启动前调用,通常用来做初始化,preRestart在重启Actor之前调用,postRestart在Actor被重启后调用,postStop 在Actor被停止后调用,通常用来清理资源。
一下是四个钩子方法的默认实现:
def preStart() {} def preRestart(reason: Throwable, message: Option[Any]) { context.children foreach (context.stop(_)) postStop() } def postRestart(reason: Throwable) { preStart() } def postStop() {}
- Akka学习笔记(3)-Actor
- Akka学习笔记(二):Actor Systems
- Akka学习笔记(三):什么是Actor
- Akka学习笔记07--TypedActor(有类型的Actor)
- Akka学习笔记07--TypedActor(有类型的Actor)
- Akka学习笔记04--Actor生命周期
- Akka学习笔记05--Actor的创建
- Akka学习笔记06--Actor的消息
- Akka学习笔记04--Actor生命周期
- Akka学习笔记05--Actor的创建
- Akka学习笔记06--Actor的消息
- Akka学习笔记:Actor消息传递(1)
- Akka学习笔记:Actor消息传递(2)
- Akka(3): Actor监管
- Akka(1):Actor
- Akka学习笔记:Actor消息处理-请求和响应(1)
- Akka学习笔记:Actor消息处理-请求和响应(2)
- Akka学习笔记(3)
- Android命名规范
- python3 显示下载进度
- 高性能浏览器-HTTP 2.0
- 如何获取UIStoryboard里编辑的界面,如何pop回navigationController的某层界面
- 笔试之css优先级问题
- Akka学习笔记(3)-Actor
- Java中try-catch结构
- 导航菜单的实现
- Java 编码问题总结
- 添加gitignore的方法
- 如何使用SN.exe工具
- 从源代码分析Android-Universal-Image-Loader的缓存处理机制(强力推荐)
- 关于bit操作
- 出现chkstk.asm问题的解决方式之一http://blog.csdn.net/feixuedudiao/article/details/8625039