AKKA 是一款基于actor模型实现的 并发处理框架。基于事件驱动的并发处理模型,每一个actor拥有自己的属性和操作,这样就避免了通常情况下因为多个线程之间要共享属性(数据)而是用锁机制的处理。这种机制在scala,cloure 语言中应用的很好,将操作和属性放在一个独立的单元中进行处理,从而提高并发处理的能力。
下面用一个最简单的helloword作为进入akka世界的开始。
功能描述:
实现通过一个actior发送消息到另一个actor然后将处理结果返回,感觉很简单类似两个类的方法调用,但是这里实际上的处理时异步的并非同步的调用处理,这里神奇的地方就在于AKKA的内部机制了后续再做深入研究。
HelloWorld 类
package com.huawei.akka; import akka.actor.Props; import akka.actor.UntypedActor; import akka.actor.ActorRef; public class HelloWorld extends UntypedActor { @Override public void preStart() { // create the greeter actor final ActorRef greeter = getContext().actorOf(Props.create(Greeter.class), "greeter");//创建greeter actor实例 // tell it to perform the greeting greeter.tell(Greeter.Msg.GREET, getSelf());//通过tell方法给greeter actor 发送一条消息 } @Override public void onReceive(Object msg) { if (msg == Greeter.Msg.DONE) { // when the greeter is done, stop this actor and with it the application getContext().stop(getSelf()); } else unhandled(msg); } }
Greeter类
package com.huawei.akka; import akka.actor.UntypedActor; public class Greeter extends UntypedActor { public static enum Msg { GREET, DONE; } @Override public void onReceive(Object msg) { if (msg == Msg.GREET) { System.out.println("Hello World!"); getSender().tell(Msg.DONE, getSelf()); } else unhandled(msg); } }
运行HelloWorld类,akka提供了一个主actor类,可以通过这个类直接执行以上的方法,在eclipse中在helloworld类中点击 open run dailoge,然后在Main.class 选项中输入akka.Main,然后选择arguments 在program arguments 中输入 com.huawei.akka.HelloWorld,点击 apply 然后运行结果如下:
Hello World! [INFO] [09/15/2013 15:06:33.125] [Main-akka.actor.default-dispatcher-5] [akka://Main/user/app-terminator] application supervisor has terminated, shutting down
从运行结果可以看出,HelloWorld actor正确的调用了 Greeter actor 因为输出了 Hello World!从Infor日志可以看出 HelloWorld actor 正常接收到了 Greeter actor 的返回停止了当前actor。
相关推荐
读书笔记:Scala支持的著名的并发编程框架Akka的学习记录
Akka笔记 Akka消息 文档 源代码 从 Akka记录 文档 源代码 从 Akka测试 文档 源代码 从 Akka消息传递请求和响应 文档 源代码 从arunma / AkkaMessagingRequestResponse分叉
1. **Action过滤器**(Xitrum学习笔记15 - Action过滤器.pdf):这部分内容讲述了Xitrum中的Action过滤器,这是框架提供的一个关键特性,允许开发者在处理HTTP请求之前或之后执行自定义逻辑。过滤器可以用于身份验证...
在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...
读书笔记:以Scala带动对异步编程webflux、akka、pulsar、gRpc等框架学习
5. Akka框架:Akka是用Scala编写的开源框架,用于构建高度可扩展、容错的应用程序,它充分利用了Scala的Actor模型。 6. Scala与Java互操作:由于Scala是运行在JVM上的,所以可以直接使用Java库,与Java代码无缝集成...
- Scala与其他技术的结合:如Spark、Akka等,学习如何在实际项目中应用Scala。 总的来说,Scala是一种强大的工具,它的设计哲学是提供一种既能充分利用面向对象编程的优势,又能发挥函数式编程优点的语言。通过学习...
本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...
第四部分:"Scala入门及进阶-part04-Akka Actor.pdf" 专注于Scala与Akka框架的集成,Akka是用于构建高度并发、分布式和容错系统的工具。Actor模型在Akka中扮演核心角色,这部分将解释Actor如何工作,以及如何创建、...
Scala是一种多范式的编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种简洁、类型安全且高性能的...通过学习,你可以熟练掌握Scala语言,应用于大数据处理、分布式计算以及构建高并发、高可用的应用系统。
这是Spark集群管理中最核心的部分之一,Akka Actor Model用于实现高度并发和容错的分布式应用。 5. **等待系统终止**:最后一步是通过`actorSystem.awaitTermination()`等待整个系统结束。在此期间,Master节点将...
分析如`Akka`、`Quasar`或`Disruptor`等并发框架的源码,可以深入理解如何在Java中构建高效的并发系统,学习其设计思想和最佳实践。 通过阅读和研究这些源码,开发者不仅可以提升对Java并发编程的理解,还能学习到...
首先,我们来看"ConcurrentProgrammingStudyNotes",这可能是一份关于Java并发编程的学习笔记。并发编程涉及线程管理、同步机制、锁、并发容器、并发工具类等内容。Java提供了丰富的API来支持并发,如`java.util....
1. **基本语法与类型系统**: - Scala是强类型语言,变量声明时必须指定类型,但可以使用类型推断简化编写。 - `val`用于声明不可变变量,`var`用于声明可变变量。 - 类型系统包括基本类型(如Int, Double, ...
在"scala-study"这个文件夹中,可能包含的子文件有练习代码、笔记、教程文档等,这些都是学习过程中的宝贵资料。通过这些资源,初学者可以逐步了解如何使用Scala编写Spark程序,包括如何创建SparkSession、加载数据...
Dean Wampler博士作为本书的作者之一,是Typesafe公司的大数据架构师,主要使用Scala、函数式编程、Spark、Hadoop和Akka构建数据中心工具和服务。他的其他作品包括《Java开发者函数式编程》的作者以及《Programming ...
这本书的中文完整版包含高清扫描和书签功能,使得读者可以轻松查找和学习相关内容,而且文字可选择复制,方便笔记和后续查阅。 Scala在大数据领域扮演着重要角色,主要归功于它与Apache Spark的紧密集成。Spark是一...
这个压缩包中的两个文件,"一、CRM笔记.md"和"二 、CRM笔记.md"(可能其中一个文件名有误,此处假设它们是不同的笔记),都是Markdown格式的文档,通常用于记录学习心得或教程。 首先,我们来深入了解一下CRM系统。...
1. **学习Scala的原因**: Scala的出现主要是为了解决Java等传统编程语言在处理并发、复杂数据结构和模式匹配等方面的问题。它的设计目标是提高代码的可读性和可维护性,同时提供强大的类型系统和表达能力,使得...
**1. Scala简介** Scala由Martin Odersky在2003年设计,目标是创建一种既具有静态类型安全性又能支持敏捷开发的语言。它运行在Java虚拟机(JVM)上,可以无缝地与Java代码交互,同时也提供了比Java更高级的语法结构...