Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。
Actor模型并非什么新鲜事物,它由Carl Hewitt于上世纪70年代早期提出,目的是为了解决分布式编程中一系列的编程问题。其特点如下:
系统中的所有事物都可以扮演一个Actor
Actor之间完全独立
在收到消息时Actor所采取的所有动作都是并行的,在一个方法中的动作没有明确的顺序
Actor由标识和当前行为描述
Actor可能被分成原始(primitive)和非原始(non primitive)类别
非原始Actor有
由一个邮件地址表示的标识
当前行为由一组知识(acquaintances)(实例变量或本地状态)和定义Actor在收到消息时将采取的动作组成
消息传递是非阻塞和异步的,其机制是邮件队列(mail-queue)
所有消息发送都是并行的
Java 代码:
public class Greeting implements Serializable { public final String who; public Greeting(String who) { this.who = who; } } public class GreetingActor extends UntypedActor { LoggingAdapter log = Logging.getLogger(getContext().system(), this); public void onReceive(Object message) throws Exception { if (message instanceof Greeting) log.info("Hello " + ((Greeting) message).who); } } ActorSystem system = ActorSystem.create("MySystem"); ActorRef greeter = system.actorOf(Props.create(GreetingActor.class), "greeter"); greeter.tell(new Greeting("Charlie Parker"), ActorRef.noSender());
Scala 代码:
case class Greeting(who: String) class GreetingActor extends Actor with ActorLogging { def receive = { case Greeting(who) ⇒ log.info("Hello " + who) } } val system = ActorSystem("MySystem") val greeter = system.actorOf(Props[GreetingActor], name = "greeter") greeter ! Greeting("Charlie Parker")
在线 API doc :http://tool.oschina.net/apidocs/apidoc?api=akka2.0.2%2Fapi
1.akka是什么? akka是一种基于Scala的网络编程库,实现了RPC框架。spark在1.6之前使用的是akka进行通信,1.6及以后是基于netty。现阶段的Flink是基于Akka+Netty。如果需要了解Spark或者Flink的网络通信,就必须得从akka开始。 2.Akka中的方法 主类是在akka.actor.Actor,Endpoint 有三个
Akka介绍 欢迎使用 Akka,这是一组用于设计跨处理器内核和网络的可扩展、弹性系统的开源库。 Akka 允许您专注于满足业务需求,而不是编写低级代码来提供可靠的行为、容错和高性能。 许多常见的实践和公认的编程模型并没有解决为现代计算机体系结构设计系统所固有的重要挑战。 为了取得成功,分布式系统必须应对这样的环境:组件崩溃而没有响应,消息在线路上丢失而无踪,网络延迟波动。 这些问题经常发生在精心
为什么使用akka akka是Actor模型的实现。Actors为我们提供了以下优点: 1)对并发/并行程序的简单的、高级别的抽象。 2)异步、非阻塞、高性能的事件驱动编程模型。 3)非常轻量的事件驱动处理。 akka提供了容错性 使用“let-it-crash”语义和监管者树形结构来实现容错。非常适合编写永不停机、自愈合的高容错系统。监管者树形结构可以跨多个JVM来提供真正的高容错系统。 位置透
import akka.actor.{Actor, ActorSystem, Props} import akka.util.Timeout import akka.pattern.ask import scala.concurrent.duration.Duration import scala.util.Failure class testAskActor extends Actor{
一、Akka简单介绍 Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable)、弹性的(Resilient)、快速响应的(Responsive)应用程序的平台。 Actor是Akka中最核心的概念,它是一个封装了状态和行为的对象,Actor之间可以通过交换消息的方式进行通信,每个Actor都有自己的收件箱(Mailbox)。 通过Actor能够简化锁及线程管理,可以非常容易地开发
Akka 用于构建高并发、分布式且具有容错机制的事件驱动型的应用,本文是 Scala Cookbook 一书中 Akka 部分内容的总结。 Akka Guide Actor 模型与线程比较,是一种高层次的抽象。说 “高层次的抽象”这句话,就意味着这个东西简单易用,你不需要考虑太多底层的其他东西。所以如果理解了 Actor 模型的原理,就可以专注解决问题,而不需要把注意力放在像线程、锁和共享数据这样
什么是Akka,Akka主要用来编写分布式的,可扩展的,并发的应用程序,详见官方文档,官方文档真的好长啊,这里记了一些akka的helloworld程序,算是简单入门吧。 Akka总结 Actor模型基于一种通过消息进行通信的简单的actor实体结构,能够轻松地构建应用程序来实现高并发性和可伸缩性。 用于并发计算的actor模型基于各种称为actor的原语来构建系统。Actor执
欢迎使用 Akka,Akka 是一套被用来在在多处理器核心和网络之间被设计可扩展和具有相关弹性的开源工具集。Akka 允许你更加关注商业需求而不是书写低级别的代码来提供可靠性,容错率和高性能。 很多常用的设计实践和已经接受的程序模型不能解决一些重要的挑战,这些挑战通常是现代计算机体系结构中固有的。为了让项目取得成功,分布式系统必须能够应付一些环境出现的问题,例如组件崩溃不能响应,发送的消息没有痕迹
引言 这篇文章主要是第一次学习Akka编程,先试试水,探探坑,对Akka和SBT的使用有一个直观的了解,以几个简单的akka编程实例来说明akka的使用。希望在日后的学习和编程中,能有更多自己的体会和经验总结来分享。 Actor模型 Actor实例可以想象成是服务器上的Web服务,你无法控制,只能通过发送消息去请求执行任务或查询信息,而不能直接在Web服务中修改状态或者处理资源。通过发送不可改变的
温馨提示:Akka 中文指南的 GitHub 地址为「akka-guide」,欢迎大家Star、Fork,纠错。 Akka 简介 欢迎来到 Akka,它是一组用于设计跨越处理器和网络的可扩展、弹性系统的开源库。Akka 允许你专注于满足业务需求,而不是编写初级代码来提供可靠的行为、容错性和高性能。 许多常见的实践和公认的编程模型并不能解决现代计算机体系结构所固有的重要挑战。为了取得成功,分布式系统
邮箱 一个Akka Mailbox保存发往某个Actor的消息。通常每个Actor都拥有自己的邮箱,但也有例外,例如使用BalancingPool的所有路由子(routee)共享同一个邮箱实例。 邮箱选择 为actor指定一个消息队列类型 为某个特定类型的actor指定一个特定类型的消息队列是有可能的,只要通过actor扩展RequiresMessageQueue参数化特质即可。下面是一个示例:
下载地址:http://akka.io/ 第一步:解压缩到F:\WorkFiles\akka-2.3.4 第二步:添加环境变量,AKKA_HOME : F:\WorkFiles\akka-2.3.4 第三步:path : %AKKA_HOME%\bin
akka系列文章目录 akka学习教程(十四) akka分布式实战 akka学习教程(十三) akka分布式 akka学习教程(十二) Spring与Akka的集成 akka学习教程(十一) akka持久化 akka学习教程(十) agent akka学习教程(九) STM软件事务内存 akka学习教程(八) Actor中的Future-询问模式 akka学习教程(七) 内置状态转换Procedu
Akka的优点太多,高性能、高可靠、高并发、分布式、可容错、可扩展、事件驱动,不一一叙述。不同版本的API差异很大,本文代码运行在 Scala 2.10.3 和 Akka 2.3.2 之上。 <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-actor_2.10</artifactId> <versio
概述 并发分布式框架:作者号称可以在jvm用来构建高并发,分布式,消息驱动式的程序。依据当前我使用的范围还只局限于并发与任务调度的使用层面上, 在这两方面的表现还是很令我满意的。 当前自己所熟悉的互联网开发模式有 ------------------------------------------------------------ 借组于队列,异步处理问题,处理不需要及时作出响应的任务 使用缓存
http://www.soso.io/article/8715.html Akka的设计目标就是为分布式准备的,因此所有Actor之间的交互都是通过消息,且所有动作都是异步的。这种做法就是为了确保Akka的所有功能无论是在单独的JVM,还是包含了成百上千机器的Cluster,都是可用的。 然而,本地与分布式总是存在区别,主要牵涉到两点: 消息需要支持序列号; 消息传递的可靠性问题; 为了保证本地处
下面的内容解释了一个理论上的模型。现代 JavaScript 引擎着重实现和优化了描述的几个语义。 运行时 下图是 JavaScript 运行时的可视化描述: 从图中可以看出,其主要包含了栈、堆、队列等数据结构。 栈 用于函数执行的「调用栈」,英文名为「call stack」。 function foo( b ) { var a = 10; return a + b + 11;}funct
1 逻辑流程 方案1: 微信消息通过中转平台转发给小能服务器 小能消息直接发送到微信服务器,小能维护Token 方案2: 微信消息通过中转平台转发给小能服务器 小能服务器消息直接发送到中转平台,中转平台维护真实Token,小能维护由平台提供给小能的Token 注(1): 此处逻辑为可选逻辑,详情参见 【小程序深度对接->上报用户信息】 2 集成步骤 2.1 添加发起会话按钮 <button ope
门户首页 模板文件对应的是模板目录/portal/index.html,这个页面没有被控制器 assign任何变量,模板开发者完全可以用 portal:articles等其它模板标签制作此页面 文章列表 默认模板文件(可以增加更多) 默认模板文件对应的是模板目录/portal/list.html 控制器 assign 过的变量 $category这个变量是就是一个文章分类对象,可以当成数组直接用
仅供参考,我是一个TYPO3菜鸟:)我在我的TYPO3个人网站上做我自己的extbase/流体扩展来管理画廊。现在,我下面这个留档:开发与Extbase和流体TYPO3扩展 目前,我只在Domain/Model中构建了2个类: 加利。php 变量已设置,getter/setter也已设置。 我很清楚我需要在一段关系中把两者联系起来(“1: n”?)但是我不使用扩展生成器,我想自己理解如何做到这一点
“node-validator”,顾名思义,我们要开发的是一个验证字符串合法性的npm模块。 首先我们需要建立一个包的目录: node-validator |- lib/ |- test/ |- package.json |- index.js |- README.md 由于项目比较简单,可以把所以的代码放在根目录下的index.js中。 不过为了项目的可扩展性,我们会把所有实
Keras泛型模型接口是用户定义多输出模型、非循环有向模型或具有共享层的模型等复杂模型的途径 这部分的文档假设你已经对Sequential模型已经比较熟悉 让我们从简单一点的模型开始 第一个模型:全连接网络 Sequential当然是实现全连接网络的最好方式,但我们从简单的全连接网络开始,有助于我们学习这部分的内容。在开始前,有几个概念需要澄清: 层对象接受张量为参数,返回一个张量。张量在数学上只
在第一章中,将通过 node-validator 的开发过程来介绍如何从头开发、测试、维护一个npm的模块,加入 npm 的大家庭。 在学习开发你的第一个 npm 模块之前,让我们一起来看看将要实现的是一个什么样功能的包。 node-validator 是一个用来校验字符串的 Node.js 模块,我们可以通过 npm install is-valid --save 将其作为依赖安装到你的项目中。
模块开发 模块的下载与安装 模块目录结构 如何编写模块 1、模块的下载与安装 首先,来看一下ZTBCMS的目录结构: 如上图所示,红色方框内就是安装ZTBCMS之后,系统默认下载好的模块了,而开发的时候需要用到一些另外的模块,比如微信管理模块,短信模块等,这些就需要从ZTBCMS系统后台下载。 模块的下载: 进入后台,依次点击 模块->模块仓库,如下图所示: 接着就列出来ZTBCMS系统已经开发好