Akka初学1
来源:互联网 发布:java 安卓开发 编辑:程序博客网 时间:2024/06/05 16:49
package akka.scalaimport akka.actor.{Actor, ActorSystem, Props}/** * 定义 AkkaTest1 Actor * Created by liuwei on 2017/5/11. */class AkkaTest1 extends Actor { /** * receive方法定义实现,其中使用了模式匹配表达式 * 接收字符串Hello作为消息,做出相应打印动作 * @return */ override def receive: Receive = { case "Hello" => println("world") case _ => println("no world") }}/** * 测试actor */object Test1_AkkaTest1 extends App { //初始化一个actor系统 //ActorSystem接收一个name参数,并且通过system.actorOf创建actor实例 val system = ActorSystem("Test1_AkkaTest1") //初始化一个actor,Actor创建后自动运行 val helloWorldActor = system.actorOf(Props[AkkaTest1], name = "helloWorld") //通过!方法来发送消息 helloWorldActor ! "Hello" helloWorldActor ! "liuwei" helloWorldActor ! "Hello liuwei" // g关闭系统 system.terminate()}
Actor模型
Actor实例可以想象成是服务器上的Web服务,你无法控制,只能通过发送消息去请求执行任务或查询信息,而不能直接在Web服务中修改状态或者处理资源。通过发送不可改变的消息,虽然看上去有些限制,但是可以很简单安全的编写并发程序。
Actor系统的形象理解
一个actor是基于Actor系统的最小单元,就像面向对象系统中的对象实例一样,它也封装了状态和行为。我们无法窥探actor内部的信息,只能通过发送消息来请求状态信息(就像是问一个人,他感觉如何)。actor中有一个存放不可变状态信息的信箱。我们通过发送信息和actor进行通信,当actor收到信息之后,它会运用相关算法来处理具体的信息。
在一个应用程序中,多个actor构成了一套层级系统,像是一个家族或者一个商业组织。一个actor可以认为是一个商业组织的个人。一个actor有一个父亲,称为监督者(supervisor),还有好多孩子,可以认为,在一个商业组织中,主席(actor)下面有多个副主席,副主席也有很多下属随从。
Actor系统的最佳实践是“委派任务”,尤其是当actor的行为被阻塞的时候。可以想象,在实际商业活动中,主席将要做的工作分配给下面的几个副主席去分别执行,而副主席也会将子任务分配给自己的随从,直到该任务被下属们执行完毕。
处理故障
Actor模型的一个重要内容是处理故障。在工作工程中,如果出现错误或者抛出异常,actor和其子actor都将暂停,然后发送一条信息给监督者(supervisor)actor,报告出现故障的信号。
根据工作任务和故障的性质,监督者actor将会作出几种选择:
- 恢复下属actor,保留内部状态
- 重启下属actor,清空状态
- 终止下属actor
- 上报故障
ActorSystem
一个actor system是actors的层级集团,分享公共配置信息(比如分发器dispatchers,部署deployments,远程功能remote capabilities,地址addresses)。它同时也是创建和查询actors的入口。ActorSystem是为你的应用程序分配线程资源的结构。
ActorRef
当你调用ActorSystem
的actorOf
方法时,将创建并返回一个ActorRef
的实例: def actorOf(props: Props, name: String): ActorRef
。
这个引用用来处理actor,你可以将其看做是处理实际actor的代理人(broker)或包装外观(facade)。ActorRef防止你破坏Actor模型,比如直接处理Actor实例,或直接修改Actor实例中的变量。所以只能通过给actor发送消息方式来执行任务,这种“袖手旁观(不干涉,hands-off)”的方法帮助巩固适宜的编程实践。
ActorRef有以下特点:
http://blog.csdn.net/JasonDing1354/article/details/50533113
- 它是不可变的
- 它与actor实体是一对一的关系
- 它是可序列化的,网络可感知的。这使得你可以在网络环境中传送一个ActorRef
- Akka初学1
- akka初学2
- Akka介绍(Akka 1)
- Akka(1):Actor
- Akka
- Akka
- Akka
- Akka
- akka学习笔记(1)
- akka之RPC通信1
- Akka边学边写(1)-- Hello, World!
- akka 定时任务实例for play2.1
- Akka学习笔记(1)-HelloWorld
- Akka学习笔记:Actor消息传递(1)
- Scala---Akka Actor (一)tutorial-1
- 翻译:AKKA笔记 - Actor消息 -1(一)
- 翻译:AKKA笔记 - Actor消息 -1(二)
- Akka/play(activator) 2.5.3 创建工程 1
- [UVA 12298 Super Poker II]FFT/NTT
- 读书笔记《Effective C++》条款15:在资源管理类中提供对原始资源的访问
- 排序算法之归并排序
- 父窗体与子窗体问题,Form.MdiParent 属性
- C++private,protected,public。
- Akka初学1
- 1.产品
- ssdt_表_遍历
- 图片上传的思路
- Ubuntu 14.04 64位 CUDA 安装实录
- KAFKA:如何做到1秒发布百万级条消息
- 如何设置C#窗体大小不能改变
- Java 泛型学习笔记
- 初识Arduino