由于目前Scala的使用频率较高,因此主要语言为Scala 主要分为下面几个部分: Actor模型的基本概念使用 讲一下akka框架中scala的基本使用,主要提几个重要的api 写几个例子帮助理解...什么是Actor模型 Actor的概念来自于Erlang,在AKKA中,可以认为一个Actor就是一个容器,用以存储状态、行为、Mailbox以及子Actor与Supervisor策略。...Mailbox相当于是一个小型的队列,一旦Sender发送消息,就是将该消息入队到Mailbox中。入队的顺序按照消息发送的时间顺序。Mailbox有多种实现,默认为FIFO。...消息和信箱 异步地发送消息是用actor模型编程的重要特性之一。消息并不是直接发送到一个actor,而是发送到一个信箱(mailbox)。如下图。 ?...虽然所有actor可以同时运行,但它们都按照信箱接收消息的顺序来依次处理消息,且仅在当前消息处理完成后才会处理下一个消息,因此我们只需要关心发送消息时的并发问题即可。
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165) at akka.actor.Actor...) at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526) at akka.actor.ActorCell.invoke(ActorCell.scala...:495) at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) at akka.dispatch.Mailbox.run(Mailbox.scala...:224) at akka.dispatch.Mailbox.exec(Mailbox.scala:234) at scala.concurrent.forkjoin.ForkJoinTask.doExec...解决办法:在oozie 脚本的flink命令前加env -i,这样会清除所有的环境变量,oozie就会使用登陆yarn用户的环境变量来运行shell了。 #!
这是用户创建的所有 Actor 的父 Actor。不要让用户名混淆,它与最终用户和用户处理无关。使用 Akka 库创建的每个 Actor 都将有一个事先准备的固定路径/user/。...因为所有 Actor 的引用都是有效的 URL,所以akka://是协议字段的值。 接下来,就像在万维网(World Wide Web)上一样,URL 标识系统。...) at akka.actor.ActorCell.invoke(ActorCell.scala:488) at akka.dispatch.Mailbox.processMailbox...(Mailbox.scala:257) at akka.dispatch.Mailbox.run(Mailbox.scala:224) at akka.dispatch.Mailbox.exec...(Mailbox.scala:234) at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
当该 Actor 的 MailBox 接收到消息,就会调用 receive 方法 // 3. ...4、会在底层创建 Dispather Message,是一个线程池,用于分发消息,消息是发送到对应的 Actor 的 MailBox。...6、MailBox 实现了 Runnable 接口,是一个线程,一直运行并调用 Actor 的 receive 方法,因此当Dispather 发送消息到 MailBox 时,Actor 在r eceive..."hello" ,表示把 hello 消息发送到 SayHello Actor 的 Mailbox (通过Dispatcher Message 转发)。...3、当有消息到达 MailBox,就会去调用 Actor 的 receive 方法,即将消息推送给 receive 方法。
文章目录 邮箱 依赖 简介 邮箱选择 指定 Actor 的消息队列类型 指定调度器的消息队列类型 如何选择邮箱类型 默认邮箱 将哪个配置传递到邮箱类型 内置邮箱实现 邮箱配置示例 PriorityMailbox...通常,每个 Actor 都有自己的邮箱,但也有例外,如使用BalancingPool,则所有路由器(routees)将共享一个邮箱实例。...邮箱选择 指定 Actor 的消息队列类型 通过让某个 Actor 实现参数化接口RequiresMessageQueue,可以为某个 Actor 类型指定某种类型的消息队列。...注释:接口中的所需类型为 Actor 创建的邮箱中的队列类型,如果队列未实现所需类型,则 Actor 创建将失败。 指定调度器的消息队列类型 调度器还可能需要运行在其上的 Actor 使用的邮箱类型。...如果调度器需要如上所述的邮箱类型,那么将使用该要求的映射来确定要使用的邮箱类型。 将使用默认邮箱akka.actor.default-mailbox。
你可以修改的典型设置示例: 日志级别和日志记录器后端 启用远程处理 消息序列化程序 路由器的定义 调度员调整 Akka 使用「Typesafe Config Library」,这对于配置你自己的应用程序或使用或不使用...警告:如果你使用来自2.9.x系列的 Scala REPL 的 Akka,并且没有向ActorSystem提供自己的ClassLoader,那么使用-Yrepl-sync启动 REPL,以解决 REPLs...然后,Actor 系统合并在类路径根目录下找到的所有reference.conf资源,以形成可靠的(fallback)配置,即内部使用。...考虑到ConfigFactory.load()从整个类路径中合并所有具有匹配名称的资源,利用该功能区分配置层次结构中的 Actor 系统是最容易: myapp1 { akka.loglevel =...{ mailbox-type = "a.b.MyPrioMailbox" } 注释:特定 Actor 的部署部分由 Actor 相对于/user的路径标识。
稍微再补充两句,如上图所示在 Actor 模型系统中,主要有互不依赖的 Actor 组成(图中圆圈),Actor 之间的通信是通过消息来实现的,其中每个 Actor 都有一个 MailBox 来存储接收到的消息...Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。它已经成功运用在电信行业。...Akka 是 JAVA 虚拟机 JVM 平台上构建高并发、分布式和容错应用的工具包和运行时。Akka 用 Scala 语言写成,同时提供了 Scala 和 JAVA 的开发接口——摘自百度百科。...来自于内心的疑问:Actor 与 Actor 之间通过消息进行通讯,那么用于传输的消息实体该如何定义? ? 来自于灵魂的碰撞 1:拆分一句话的 Actor,该如何定义? ?...来自于灵魂的碰撞 2:统计每个单词出现次数的 Actor,该如何定义? ? 来自内心 + 灵魂的发问:该如何攒到一起? ? 第四步:代码写完了,是该一览尊荣的时候了。 ? 效果达到预期,杠杠滴!
Akka的这些鲜明的特点都是通过消息驱动来实现的。 曾经看到一个关于Actor模式的观点:认为Actor并不适合并发(concurrency)编程,更应该是维护内部状态的运算工具。...我们在本篇先介绍一下ActorRef,Mailbox,State和Behavior。 1、ActorRef:Akka系统是一个树形层级式的结构,每个节点由一个Actor代表。...所以ActorRef是唯一的,代表了某个路径指向位置上的一个运行时的Actor实例,我们只能用ActorRef来向Actor发送消息 2、Mailbox:可以说成是一个运算指令队列(command queque...Actor从外部接收的消息都是先存放在Mailbox里的。系统默认Mailbox中无限数量的消息是按时间顺序排列的,但用户可以按照具体需要定制Mailbox,比如有限容量信箱、按消息优先排序信箱等。..."PriorityMailbox" } Actor101.scala: import akka.actor._ import akka.dispatch.PriorityGenerator import
Actor 是 Scala 基于消息传递的并发模型,虽然自 Scala-2.10 其默认并发模型的地位已被 Akka 取代,但这种与传统 Java、C++完全不一样的并发模型依旧值得学习。..."actor test2" } } Actor是如何工作的 每个actor对象都有一个 mailbox,可以简单的认为是一个队列,用来存放发送给这个actor的消息。...当 actor 发送消息时,它并不会阻塞,而当 actor 接收消息时,它也不会被打断。发送的消息在接收 actor 的 mailbox 中等待处理,直到 actor 调用 receive 方法。...actor_receive.jpg 与线程的关系 Actor 的线程模型可以这样理解:在一个进程中,所有的 actor 共享一个线程池,总的线程个数可以配置,也可以根据 CPU 个数决定。...当一个 actor 启动后,Scala 分配一个线程给它使用,如果使用 receive 模型,这个线程就一直为该 Actor 所有。
(Akka是一个基于scala语言的比较先进异步通信的消息框架)但由于Akka不适合大文件的传输,其大文件是基于Jetty实现的HttpFileServer实现。...在java的并发开发实质上是通过thread+lock实现,而akka 是通过消息不可变更和通信实现。 Akka的特点是1. 每个Actor自己的内部功能都是被串行执行的。2....(image-a95df3-1646009602027)] 在Akka中重要是actor模型和 mailBox 通信系统,每一个Actor都维护一个Mailbox, 既可以收发消息。...Dispatcher:消息分发器(来自netty的概念),负责将 RpcMessage 分发至对应的 RpcEndpoint。...在传输层中创建的所有通道都是双向的。
它基于经典的Actor并发模型(即所有的消息都是基于Actor组件进行传递,后面我们会作详细介绍),拥有如下特点: 并行与并发:提供对并行与并发的高度抽象。...Akka架构体系 Akka采用Scala开发,运行于JVM之上,提供了Scala和Java两种API,目前所属Lightbend公司(原名Typesafe)。...Actor异步消息通信如图1-3所示。 ? 图1-3 Actor的异步消息通信 体系结构 Actor是Akka最核心的概念,也是最基本的执行单元,所以对Actor管理和监控的有效性是极为重要的。...邮箱 (Mailbox) 每个Actor都有自己的邮箱,所有其他Actor发送过来的消息都会进入该邮箱。Akka自带多种邮箱类型,也提供自定义邮箱的接口。...Akka底层采用Scala语言实现(JVM上另外一款明星语言),它基于Actor模型,在底层帮助开发者屏蔽了异步、消息通信、容错处理、网络服务、分布式集群等实现细节。
com.sjzx.spray.can.HttpExt$$anonfun$1.apply(Http.scala:153) at akka.actor.TypedCreatorFunctionConsumer.produce...(Props.scala:401) at akka.actor.Props.newActor(Props.scala:339) at akka.actor.ActorCell.newActor...(ActorCell.scala:534) at akka.actor.ActorCell.create(ActorCell.scala:560) at akka.actor.ActorCell.invokeAll...$1(ActorCell.scala:425) at akka.actor.ActorCell.systemInvoke(ActorCell.scala:447) at akka.dispatch.Mailbox.processAllSystemMessages...(Mailbox.scala:262) at akka.dispatch.Mailbox.run(Mailbox.scala:218) at akka.dispatch.ForkJoinExecutorConfigurator
Actor 的消息以邮件形式在多个 Actor 之间通信传递,每个 Actor 会有一个自己的邮箱(MailBox),用于接收来自其他 Actor 的消息,因此 Actor 模型中的消息也称为邮件。...Actor1 和 Actor3 先后向 Actor2 发送消息,消息被依次放入 Actor2 的 MailBox 队列的队尾 ; Actor2 从 MailBox 队列的队首依次取出消息执行相应的操作,...Message Dispatcher 将 MailBox 加入线程。需要注意的是,只有当 MailBox 是线程时,才能处理 MailBox 中的消息。...虽然 Actor 模型有上述的诸多优点,但它并不适用于分布式领域中所有的应用平台或计算框架。...Akka 是一个为 Java 和 Scala 构建高度并发、分布式和弹性的消息驱动应用程序的工具包。Akka 框架基于 Actor 模型,提供了一个用于构建可扩展的、弹性的、快速响应的应用程序的平台。
它产生的影响力如此之大,甚至使得Scala语言从2.10开始,就放弃了自己的Actor模型,转而将AKKA Actor收编为2.10版本的语言特性。...AKKA的Actor模型参考了Erlang语言,为每个Actor提供了一个专有的Mailbox,并将消息处理的实现细节做了良好的封装,使得并发编程变得更加容易。...AKKA很好地统一了本地Actor与远程Actor,提供了几乎一致的API接口。...Twitter实现的Finagle是针对RPC通信,Akka则提供了内部的消息队列(MailBox),而由LinkedIn主持开发的Kafka则提供了支持高吞吐量的分布式消息队列中间件。...Spray对HTTP请求的内部处理机制实则是基于Akka-IO,通过IO这个Actor发出对HTTP的bind消息。例如: IO(Http) !
本篇作为scala快速入门系列的第四十篇博客,为大家带来的是关于Akka的内容。 ?...Actor模型:在计算机科学领域,Actor模型是一个并行计算(Concurrent Computation)模型,它把actor作为并行计算的基本元素来对待:为响应一个接收到的消息,一个actor能够自己做出一些决策...,如创建更多的actor,或发送更多的消息,或者确定如何去响应接收到的下一个消息。...Actor是Akka中最核心的概念,它是一个封装了状态和行为的对象,Actor之间可以通过交换信息的方式进行通信,每个Actor都有自己的收件箱(Mailbox)。..."connect" } } 好了,本期的分享就到这里了,另外scala快速入门系列暂时先告一个段落,感谢各位小伙伴的支持和鼓励!
接受到的异步消息存在于actor内部的一个队列中,我们可以把它形象化的叫做邮箱(mailbox)。 Actor模型定义 一种分布式并行计算模型。...Actor工作原理 工作流程 Actor2从MailBox队列中依次取出Actor1和Actor3发送的消息执行相应的操作 消息传递流程 Actor的行为 当一个actor接受到消息后,它可以做如下事情...4.并发度高 每个 Actor 只需处理本地 MailBox 的消息,因此多个 Actor 可以并行地工作,从而提高整个分布式系统的并行处理能力。...技术栈中的标准库 2.Akka: 为java和scala构建高度并发、分布式和弹性的消息驱动应用程序的工具包 Quasar(Java): 开源的JVM库 框架与语言 Actor 模型在 1973 年被提出...Akka 是一个为 Java 和 Scala 构建高度并发、分布式和弹性的消息驱动应用程序的工具包。Akka 框架基于 Actor 模型,提供了一个用于构建可扩展的、弹性的、快速响应的应用程序的平台。
我们几乎可以将所有业务处理流程都可以建模为数据流的形式。...最初的Scala语言也实现了简单的Actor模型,但随着AKKA框架的推出,Scala放弃了自身的Actor,转而选择使用AKKA。...在《Scala并发编程》一书中,Aleksandar Prokopec形象地描述了Actor系统: Actor系统模仿了人类的组织,如公司、政府和其他大型机构。...Actor持有的MailBox正好借用了这里所谓的电子邮箱概念。...因而对于每个Actor而言: 每个Actor都拥有独立的MailBox; 接收到的消息皆为不可变对象,且完全独立; 不管是tell消息还是ask消息,Actor执行消息的方式都是异步非阻塞的。
,发现kafka报错,但是kafka在这个代码段中并没有使用,原因就是我在今天的其他项目中添加的kafka依赖导致了冲突。...:171) at akka.actor.Actor$class.aroundReceive(Actor.scala:517) at akka.actor.AbstractActor.aroundReceive...(AbstractActor.scala:225) at akka.actor.ActorCell.receiveMessage(ActorCell.scala:592) at akka.actor.ActorCell.invoke...(ActorCell.scala:561) at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:258) at akka.dispatch.Mailbox.run...(Mailbox.scala:225) at akka.dispatch.Mailbox.exec(Mailbox.scala:235) at akka.dispatch.forkjoin.ForkJoinTask.doExec
Routing模式的特点是所有运算Actor的运算逻辑都是相同的,分别对不同的输入进行相同的运算。不过我们应该知道运算结果的顺序是无法预计的,毕竟Actor模式是典型的无序运算。...可以说Router不是标准的Actor,因为它不需要实现任何其它的功能,基本功能是预设嵌入的。Router的信箱直接代表了任务分配逻辑,与标准Actor逐个运算信箱中消息相比,能大大提高任务分配效率。...如此所有Routee都是Router的直属子级Actor,可以实现Router对Routees的直接监管。...运算结果显示:虽然出现了多次异常,router重启了f发生异常的Routee,所有消息都得到了处理。 Akka中有些routing模式支持Router-Pool Routee的自动增减。...下面是本次示范的完整源代码: import akka.actor._ import akka.routing._ import scala.annotation.tailrec import scala.concurrent.duration
上面这段文字摘抄自 Akka 官网(akka.io),翻译成中文也就是:“Akka 是一个为 Java 和 Scala 构建高并发、分布式和弹性消息驱动应用程序的工具包”。...每一个 Actor 都由状态(State)、行为(Behavior)和邮箱(MailBox,其实就是一个消息队列)三部分组成: 状态:Actor 中的状态指 Actor 对象的变量信息,状态由 Actor...所有 Actor 之间不共享数据,只通过消息沟通,因此不用关心传统并发程序编写过程中的并发安全问题(因为根本没有共享的数据)。...三、Akka 简单使用 接下来是关于 Akka 的一个超简明教程,帮助大家初步理解并入门 Akka,其内容涵盖了所有 PowerJob 中用到的 API,也就是说,看懂这部分,源码中的 Akka 就不再可怕喽...~ 3.1 开发 Actor 首先,不得不提的一点是,Akka 从 2.6 版本开始,维护了 2 套 API(算上 Scala 和 Java 版本就 4 套了...看着IDE的智能提示就头大...)
领取专属 10元无门槛券
手把手带您无忧上云