[Akka基础系列 01]Akka之HelloWord

scala自从2.10开始,则直接采用akka作为并发模型,本文作为akka的第一个入门实例。

1.Akka入门实例

package com.tv189.actor

import akka.actor.{Actor, ActorSystem, Props}

/**
 * Created by molyeo on 2015/8/6.
 */
object AkkaTest01 extends App {
  val system = ActorSystem("AkkaTest")
  val helloActor = system.actorOf(Props[HelloActor], name = "helloActor")
  helloActor ! "hello"
  helloActor ! "yes"

  class HelloActor extends Actor {
    def receive = {
      case "hello" => println("hello back to you")
      case _ => println("huh?")
    }
  }

}

运行结果如下:

hello back to youhuh?
  • 首先通过继承Actor创建HelloActor,并重写receive方法
  • 定义ActorSystem
  • 通过actorOf方法得到具体的Actor实例helloActor
  • 调用!方法发送消息

2.Actor模型

2.1.Actor模型的要点

  • 基于Actor的系统中 Actor是最小的抽象单元,  就像object 之于 oop
  • 一个Actor封装了状态和行为
  • 外界不能进入Actor以获取其状态、字段、执行方法,和Actor的交互只能通过message
  • 一个Actor有一个信箱mailbox,将外部发送来的消息msg存到队列中
  • Actor的终生就是在等待msg,并依次取出mailbox中的消息进行处理

2.2.Actor模型的组织观

  • 将Actor系统视为一个公司,从上到下有严格的层级关系,公司中员工是person,也是actor
  • 一个Actor仅有一个上级主管 称为 supervisor,就是create这个Actor的 那个Actor
  • 一个Actor可能有多个下属小兵,真正干着脏累差活的actor
  • 一个Actor可能有多个同级的兄弟部门actor

2.3.开发actor系统的关键

  • 委托 委托 委托!!! 以做的更多!
  • 公司老总不能事无巨细全部承担,他的主要工作就是分配公司工作和监督
  • 各部门主管收到任务,要么自己干,要么再细分任务,然后分配到自己的下属手中并监督
  • 如果公司还有更多的层级,则继续上面这个主管的龌龊勾当
  • 最底层的员工收到细粒度任务,干着自己最擅长的事情

2.4.Actor的失效处理

  • 人无完人,Actor也不可能100%完成任务
  • 如果任务执行失败,一个Actor会挂起自己及其下属,然后发消息告诉其上级主管“我失败了”!
  • 上级主管收到下属的“失败”消息时,可以有如下反应:
    1. 失败就失败,就这样吧,没太大关系:保持当前状态,恢复Actor,继续工作
    2. 没成功啊,那重新做一遍吧             :重置状态,重启该Actor
    3. 没机会了,失败了你就滚!解雇下属:关闭 终结 该 Actor
    4. 这事我也决定不了,我请示我的上级:向上级Actor报告

3.Akka实现的Actor模型的一些附加特性

  • 实例化一个Actor时,返回一个ActorRef,相当于 邮箱地址,并不能通过这个获取Actor的状态信息
  • Actor模型是线程的更高层抽象,最终是跑在java的线程中的
  • 多个Actor可能共享一个线程,这是由akka保障的
  • Actor的信箱有多种实现方式:无限变量信箱    有限信箱    带优先级信箱, 还可以自定义实现
  • akka没有让Actor扫描信箱的message
  • 一个Actor终结(无论是正常还是非常的)它的信箱中的msg进入akka系统的“死信箱dead letter mailbox”中

参考文献:

http://alvinalexander.com/scala/simple-scala-akka-actor-examples-hello-world-actors

时间: 2024-11-13 09:33:28

[Akka基础系列 01]Akka之HelloWord的相关文章

Power BI基础系列-01简介篇

Power BI是一套商业分析软件,它可以连接数百个数量源.简化数据准备并提供即席查询,即席查询(Ad Hoc)是用户根据自己的需求,灵活地选择查询条件,系统可以根据用户选择的条件生成对应的报表. Power BI简介 Power BI 是Microsoft公司自主研发发布的最新可视化工具,它结合了Power Query.Power Privot.Power View和Power Map等一系列工具的经验成果.最重要的是它可以将我们在Excel里的数据通过报表的形象呈现给用户,并且在Excel

JavaScript基础系列目录(2014.06.01~2014.06.08)

下列文章,转载请亲注明链接出处,谢谢! 链接地址: http://www.cnblogs.com/ttcc/tag/JavaScript%20%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%20%E6%80%BB%E7%BB%93/ 1. Javascript基础---语法(待完成) 2. JavaScript基础---数据类型(待完成) 3. JavaScript基础---Array数组(待完成) 4. JavaScript基础---正则表达式(待完成) 5. Jav

akka设计模式系列-消息模型(续)

在之前的akka设计模式系列-消息模型中,我们介绍了akka的消息设计方案,但随着实践的深入,发现了一些问题,这里重新梳理一下设计方法,避免之前的错误.不当的观点给大家带来误解. 命令和事件 我们仍然把akka中的消息分为命令和事件两大类,但二者的具体含义和实现有一点变化.“命令,是指一个actor给另外一个actor发送指令做相关的业务逻辑:事件,则是actor对某个命令的响应结果,或者对其他事件的响应结果”.之前是这样定义的,但在具体的实践过程中发现了一些问题. 比如,命令如何归类?是根据命

.net工作准备系列--01前言

注:学习参考朱毅编著的进入IT名企必读200题. 内容重在自我学习与巩固. 前言: 章节划分 01应聘须知 02基础知识(重点) 03进阶知识 04重点应用(aspnet第一部分) 04重点应用(aspnet第二部分) 05.网络通讯 06.代码与算法 07 增强知识 01应聘须知-1.了解软件开发大环境.-2.准备简历:不宜超过一页,永远准备中文,模板.-3.渠道:3大网站,中华英才,前程无忧(51job最给力),智联招聘. -4.面试禁忌:不重考官,不注礼节,夸夸其谈,急问待遇. 总得来说就

java io系列01之 "目录"

javaIO系列转载出处:http://www.cnblogs.com/skywang12345/p/io_01.html 该分类所有博文,均转载同一作者,后边不再累赘标名. java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream) 03. java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括Ou

J2EE开发实战基础系列之开卷有益

时隔七年再次接触培训有关的事情,是兴奋,更多的是恐惧,不知该如何下手. 本系列针对有Java语法基础的开发者或者爱好者,从工作开发角度出发讲解,不同于其他视频,一切皆以实用为主,过程中如有疑问,请提问于我,回答将发布在教程中添加提问部分,提问者越多,教程覆盖越全面,以实际问题为主. ----------------------------------------------------------------------------------------- 首先介绍下目前J2EE方面培训的入门

J2EE开发实战基础系列一 HelloWorld

开始咱们的第一个程序,首先是配置环境,按照上一章所描述的方式下载开发工具,然后配置Java环境变量,给大家看下具体的结构: 环境变量配置OK的提示,如上图. Eclipse和Tomcat的文件目录位置,本系列采用的都是绿色版本,如上图. 启动Eclipse.exe,Workspace路径的配置,下面的复选框表示选中后就默认一直使用该工作空间,不选择每次启动都出出现该提示框,如上图. 在这里讲解下Workspace的概念,这里目录存储项目程序段的,假如你在别的目录创建一个Java的项目,那么在Wo

J2EE开发实战基础系列一 HelloWorld【转】

开始咱们的第一个程序,首先是配置环境,按照上一章所描述的方式下载开发工具,然后配置Java环境变量,给大家看下具体的结构: 环境变量配置OK的提示,如上图. Eclipse和Tomcat的文件目录位置,本系列采用的都是绿色版本,如上图. 启动Eclipse.exe,Workspace路径的配置,下面的复选框表示选中后就默认一直使用该工作空间,不选择每次启动都出出现该提示框,如上图. 在这里讲解下Workspace的概念,这里目录存储项目程序段的,假如你在别的目录创建一个Java的项目,那么在Wo

C#基础系列:实现自己的ORM(反射以及Attribute在ORM中的应用)

反射以及Attribute在ORM中的应用 一. 反射什么是反射?简单点吧,反射就是在运行时动态获取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等.反射有什么用呢?反射不但让你在运行是获取对象的信息,还提供运行时动态调用对象方法以及动态设置.获取属性等的能力.反射在ORM中有什么用呢?我这里所讨论的ORM实现是通过自定义Attribute的方式进行映射规则的描述的.但是我们并不知道具体哪个对象需要对应哪个表,并且这些对象是独立于我们的ORM框架的,所以我们只能通过自定义Attr