Akka学习笔记:Actor消息传递(1)
来源:互联网 发布:淘宝纸箱设备 编辑:程序博客网 时间:2024/05/24 06:50
从前面的《Akka学习笔记:ACTORS介绍》,我们已经简单地了解了Actors。在这篇笔记中,我们将介绍Actor的消息传递。作为例子,我们将继续使用前面介绍的 Student-Teacher模型。
在Actor消息传递的前部分,我们将创建Teacher Actor而不是Student Actor,我们将用一个称为StudentSimulatorApp的主程序。
文章目录 [hide]
- 1 详细回顾Student-Teacher模型
- 2 StudentSimulatorApp程序
- 2.1 1、创建一个ActorSystem
- 2.2 2、为Teacher Actor创建代理
- 2.3 3、将QuoteRequest message 发送到代理中
详细回顾Student-Teacher模型
我们现在考虑消息从StudentSimulatorApp单独发送到TeacherActor。这里所说的StudentSimulatorApp只不过是一个简单的主程序。
这副图片解释如下:
1、Student创建了一些东西,称为ActorSystem;
2、他用ActorSystem来创建一个ActorRef,并将QuoteRequest message发送到ActorRef 中(到达TeacherActor的一个代理);
3、ActorRef 将message单独传输到Dispatcher;
4、Dispatcher将message按照顺序保存到目标Actor的MailBox中;
5、然后Dispatcher将Mailbox放在一个Thread 中(更多详情将会在下节中进行介绍);
6、MailBox按照队列顺序取出消息,并最终将它递给真实的TeacherActor接受方法中。
就像我所说的,不用担心。我们现在来一步一步地了解详情,当了解完详情之后,你可以返回来回顾上面六步。
StudentSimulatorApp程序
我们将通过StudentSimulatorApp程序来启动JVM,并且初始化ActorSystem。
正如我们从图中了解到,StudentSimulatorApp程序
1、创建一个ActorSystem;
2、用创建好的ActorSystem来创建一个通往Teacher Actor的代理 (ActorRef)
3、将QuoteRequest message 发送到这个代理中。
让我们单独探讨这三点。
1、创建一个ActorSystem
ActorSystem是进入Actor世界的切入点,通过ActorSystem你可以创建和停止Actors,甚至关掉整个Actor环境!
另一方面,Actor是一个体系,ActorSystem类似于java.lang.Object or scala.Any,能够容纳所有的Actor!它是所有的Actor的父类。当你创建一个Actor,你可以用ActorSystem的actorOf方法。
初始化ActorSystem的代码类似下面:
UniversityMessageSystem就是你给ActorSystem取得名字。
2、为Teacher Actor创建代理
让我们看下下面的代码片段:
actorOf是ActorSystem中创建Actor的方法。但是正如你所看到的,它并不返回我们所需要的TeacherActor对象,它的返回类型为ActorRef。
ActorRef为真实Actor的充当代理,客户端并不直接和Actor进行通信。这就是Actor Model中的处理方式,该方式避免直接进入TeacherActor或者任何Actor中的任何custom/private方法或者变量。
你仅仅将消息发送到ActorRef ,该消息最终发送到你的Actor中,你无法直接和你的Actor进行直接通信。如果你那样做,有人会恨你到死!!(这么严重?)
3、将QuoteRequest message 发送到代理中
你仅仅告诉(tell)QuoteRequest message到ActorRef中,Actor中的tell方法是! 如下:
StudentSimulatorApp 的完整代码如下:
你需要调用shutdown方法来shutdownActorSystem ,否则,JVM会继续运行!我在程序中调用了 Thread.sleep (2000) 来休眠,这看起来很傻,但是你不用担心,在后面我将会创建许多的测试用例来避免这些。
由于篇幅问题,剩下的内容在《Akka学习笔记:Actor消息传递(2)》里。
本文翻译自:http://rerun.me/2014/09/19/akka-notes-actor-messaging-1/
- Akka学习笔记:Actor消息传递(1)
- Akka学习笔记:Actor消息传递(2)
- Akka学习笔记:Actor消息处理-请求和响应(1)
- Akka学习笔记06--Actor的消息
- Akka学习笔记06--Actor的消息
- Akka学习笔记:Actor消息处理-请求和响应(2)
- 翻译:AKKA笔记 - Actor消息 -1(一)
- 翻译:AKKA笔记 - Actor消息 -1(二)
- 第108讲:Akka中的Actor消息的处理、消息回复、消息转发学习笔记
- Akka学习笔记(二):Actor Systems
- Akka学习笔记(三):什么是Actor
- Akka学习笔记04--Actor生命周期
- Akka学习笔记05--Actor的创建
- Akka学习笔记04--Actor生命周期
- Akka学习笔记05--Actor的创建
- Akka学习笔记(3)-Actor
- Akka学习笔记(六):消息传递可靠性
- akka actor远程传递对象
- 【Android】Android Camera实时数据采集及通过MediaCodec硬编码编码数据的流程
- Python学习笔记 20160615
- C#点击只打开一个窗体
- Cocos2d-Lua之函数
- uname命令的使用方法
- Akka学习笔记:Actor消息传递(1)
- 【leetcode】232. Implement Queue using Stacks
- 订阅模式(publish-subscribe)
- linux 容器(LXC) 第1章 LXC 简介
- vue 学习记录
- struts form样式怎么修改
- JAVA I/O流
- linux 容器(LXC) 第2章 chroot
- Linux下查看文件和文件夹大小