基于AKKA的后台应用开发手册范本

上传人:xmg****18 文档编号:119874642 上传时间:2020-01-28 格式:DOC 页数:86 大小:1.40MB
返回 下载 相关 举报
基于AKKA的后台应用开发手册范本_第1页
第1页 / 共86页
基于AKKA的后台应用开发手册范本_第2页
第2页 / 共86页
基于AKKA的后台应用开发手册范本_第3页
第3页 / 共86页
基于AKKA的后台应用开发手册范本_第4页
第4页 / 共86页
基于AKKA的后台应用开发手册范本_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《基于AKKA的后台应用开发手册范本》由会员分享,可在线阅读,更多相关《基于AKKA的后台应用开发手册范本(86页珍藏版)》请在金锄头文库上搜索。

1、.word格式.基于AKKA的后台应用开发手册版本 修订历史日期版本描述修改人2013-06-280.5基于AKKA的后台应用开发手册苏晓辉2013-07-111.0基于AKKA的后台应用开发手册苏晓辉基于AKKA的后台应用开发手册51 概述51.1前言51.2目的51.3范围51.4术语和缩写语62 Actor的基本开发72.1创建简单Actor72.2创建带参数构造器Actor82.3Actor停止监视82.4Actor生命周期控制92.5Actor未定义消息处理92.6Actor消息发送102.7Actor消息接收超时112.8Actor停止112.9变换Actor 消息匹配功能122.

2、10Actor消息栈122.11Actor匹配消息功能扩展132.12Actor容错机制143 Actor DSL163.1创建DSL Actor163.2切换DSL Actor 消息匹配功能163.3DSL Actor生命周期控制173.4DSL Actor异常监控173.5DSL Actor消息栈174 Typed Actor194.1创建Typed Actor194.2Typed Actor代理对象194.3Typed Actor停止204.4Typed Actor其它205 Actor日志225.1Actor Log基本功能226 Actor任务236.1Actor schedule基

3、本功能237 Actor Future使用247.1Future和Actor配合使用247.2直接使用Future247.3Future连接方法257.4Future和for配合使用257.5大量Future配合使用257.6Future回调267.7Dataflow并发278 消息总线实例298.1消息总线的功能和作用298.2PAAS平台架构298.3消息总线类308.4消息总线时序图318.5消息总线客户代码调用机制338.6消息总线服务代码实现机制348.7PAAS平台消息定义机制348.8PAAS平台异常定义机制358.9PAAS平台包结构359 注意事项3610 代码规范3711

4、总结和展望3912 附件代码4013 参考资料56基于AKKA的后台应用开发手册1 概述1.1 前言随着计算机硬件技术和网络技术的飞速发展,计算机拥有越来越多数量的内核,分布式技术和集群技术的成熟使得一个应用程序可以被分块运行在多个独立的计算机上(可能安装不同的操作系统),这些技术使得程序可以真正的并行运行。但是,我们相信编写出正确的具有容错性、可扩展性和跨平台的并发程序太困难了。这多数是因为我们使用了错误的工具和错误的抽象级别。AKKA就是为了改变这种状况而生的。通过使用Actor模型我们提升了抽象级别,为构建正确的可扩展并发应用提供了一个更好的平台。在容错性方面我们采取了“let it c

5、rash”(让它崩溃)模型,人们已经将这种模型用在了电信行业,构建出“自愈合”的应用和永不停机的系统,取得了巨大成功。Actor还为透明的分布式系统以及真正的可扩展高容错应用的基础进行了抽象。AKKA是基于SCALA的软件框架,SCALA可以运行在JVM上,并且可以完全使用JAVA的类库,这样AKKA也拥有了JAVA跨平台的能力。1.2 目的本文档的目的是帮助PAAS平台开发人员快速使用AKKA,开发基于Actor模式的应用程序。本文第二、三、四、五、六、七章介绍AKKA的基本使用方法。然后通过第八章介绍消息总线的实现和基于消息总线之上的开发方式,给出一个具体的使用例子。最后,第九、十、十一、

6、十二章给出一些在开发时的注意事项、代码规范、附件代码和总结及展望。1.3 范围本文档适用于PAAS系统整个项目周期中对Actor模式应用程序开发的指导和约束。要了解AKKA和SCALA的使用详情,参考AKKA 2.1.4官方文档和SCALA 2.10官方文档。1.4 术语和缩写语术语说明SCALA函数式编程和面向对象式编程结合的语言。AKKA基于Actor模式,用于开发并发软件的框架,提供了完整的API和各类文档。PAASPlatform-as-a-Service的缩写,意思是平台即服务。 把服务器平台作为一种服务提供的商业模式。SAASsoftware-as-a-Service的缩写。国外称

7、为SAAS,国内通常叫做软件运营服务模式,简称为软营模式。2 Actor的基本开发本章首先通过一个简单的例子快速简单的介绍AKKA actor是如何实现和使用的,然后进一步介绍带参数构造器actor的实现方式、actor的生命周期等内容。2.1 创建简单Actor创建简单的Actor模式应用程序,定义Actor1如下代码2-1所示,Actor1类继承AKKA中的Actor类,定义部分函数(Partial Function)receive,receive函数中通过模式匹配(Pattern Match)实现程序逻辑。代码 21如下代码2-2所示,通过AKKA中的ActorSystem对象的acto

8、rOf方法创建上面的Actor1类对象实例,返回AKKA中的ActorRef类型的actor1对象,actor1对象是Actor1类对象实例的引用,通过actor1对象可以向Actor1类对象实例发送消息。代码 22注意:u 如果Receive方函数中不存在默认匹配,则会向ActorSystem的事件消息流(Event Stream)发送akka.actor.UnhandledMessage(message,sender,recipient)消息。(后续2.5节会详细说明UnhandledMessage)u ActorRef类型的对象是不可变的和可序列化的,可以在网络中进行传输,作为远程对象使

9、用,具体的操作还是在本地的Actor类对象。(后续章节会详细说明ActorRef类型的对象如何作为远程对象来使用)。u Actor对象的名称可以在创建时省略;如果不省略actor对象的名称,那么在同一个父actor对象下子actor的名称必须唯一。u Actor对象的名称不能为空,并且不能是以$开头的字符串。2.2 创建带参数构造器Actor如下代码2-3所示,Actor2类带有参数的构造函数,这种情况下无法使用PropsActor2的方式创建actor2对象。代码 23可以采用call-by-name块(参考scala相关内容)的方式创建actor2对象,如下代码2-4所示。代码 24注意:

10、u Props(.)中不能始终传入同一个actor对象,例如val lazy或object extends Actor等单例工厂实现方式,这会和AKKA中actor restart机制冲突。u 构造器参数不能是可变的(var),因为call-by-name块可能被其它线程调用,引起条件竞争。2.3 Actor停止监视通过context对象(AKKA中的ActorContext类)的watch/unwatch方法可以注册/撤销对一个actor的监视,如下代码2-5所示,WatchActor类在实例化时会注册监视other,在某一时刻other停止后,WatchActor的实例会收到Termina

11、ted类型的消息,来告知被监视actor对象已经停止了。Actor的停止方式在2.8节介绍。代码 252.4 Actor生命周期控制Actor的生命回调方法,如下代码2-6所示,启动前运行preStart方法(默认为空),重启前运行preRestart方法(默认停止所有子actor,最后停止自己),重启后运行postStart方法(默认运行preStart方法),停止后调用postStop方法(默认为空)。代码 26注意:u 在重启的同时,收件箱不会被影响,可以继续接收消息。u PostStop方法一定在收件箱停止后才运行,用于关闭资源。u 消息发给已经停止的actor会被转发到系统的dead

12、Letters。u Actor的构造函数在第一次创建和每次重启时被调用,来初始化actor实体。u PreStart方法只在第一次创建时被调用,来初始化actor实体。2.5 Actor未定义消息处理Actor的unhandled方法对receive方法中未匹配成功的消息进行处理,如下代码2-7所示,默认情况有两种处理方式。当未处理消息类型是akka.actor.Terminated时,抛出akka.actor.DeathPactException;当其它未处理消息时,先akka.event.EventStream发送akka.actor.UnhandledMessage类型消息。代码 272

13、.6 Actor消息发送Actor有两种发送消息的方式,“!”(tell)和“?”(ask)。“!”是Fire-forget方式;“?”是Send-And-Receive-Future方式,如下代码2-8所示,向actor1对象发送“hi”消息,由于是异步调用,消息发送后,程序没有阻塞,直接得到future1对象,通过pipeTo方法(异步调用)给future1装载消息答复完成处理器actor2,由actor2处理“hi”请求后的答复(将答复打印到控制端),这个过程中所有方法的调用都是异步执行没有阻塞。Future类的高级使用将在后续章节介绍。代码 28注意:u 如果消息不是来自actor对象

14、,默认情况sender对象是deathLetters actor对象。u Timeout对象是ask方法的隐式参数,控制得到Future对象的最大时间,如果超过报AskTimeoutException异常。u Dispatcher对象是pipe隐式转换方法的隐式参数,指定任务分发对象。u Actor对象还可以进行消息转发,调用forward方法。2.7 Actor消息接收超时Actor可以设置接收消息超时,如下代码2-9所示,通过context的setReceiveTimeout方法启动消息接收超时功能,并设置时间间隔,超过该间隔时间没有收到消息产生ReceiveTimeout类型的消息,在下

15、面代码中通过设置Duration.Undefined停止消息接收超时功能。代码 29注意:u 时间间隔最小设置是1 milliseconds。2.8 Actor停止Actor可以通过ActorRefFactory类型的对象,例如ActorContext和ActorSystem的stop方法来停止,stop方式是异步执行的,可能在调用该方法后actor没有完全被停止,比如在调用stop方法时actor或子actor的receive方法正在运行,actor要等到这些方法结束后才停止,stop只是向actor发送了停止命令;Actor也可以通过发送akka.actor.PoisonPill消息来停止actor对象,和stop的区别在于Poiso

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号