`
VerRan
  • 浏览: 458671 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

AKKA 学习笔记之1

    博客分类:
  • JAVA
 
阅读更多

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的学习记录.zip

    读书笔记:Scala支持的著名的并发编程框架Akka的学习记录

    akka_notes:Akka在学习AkkaReact框架的同时注意

    Akka笔记 Akka消息 文档 源代码 从 Akka记录 文档 源代码 从 Akka测试 文档 源代码 从 Akka消息传递请求和响应 文档 源代码 从arunma / AkkaMessagingRequestResponse分叉

    Xitrum学习笔记

    1. **Action过滤器**(Xitrum学习笔记15 - Action过滤器.pdf):这部分内容讲述了Xitrum中的Action过滤器,这是框架提供的一个关键特性,允许开发者在处理HTTP请求之前或之后执行自定义逻辑。过滤器可以用于身份验证...

    scala学习笔记整理

    在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...

    读书笔记:以Scala带动对异步编程webflux、akka、pulsar、gRpc等框架学习.zip

    读书笔记:以Scala带动对异步编程webflux、akka、pulsar、gRpc等框架学习

    Scala-学习资料-mht.rar

    5. Akka框架:Akka是用Scala编写的开源框架,用于构建高度可扩展、容错的应用程序,它充分利用了Scala的Actor模型。 6. Scala与Java互操作:由于Scala是运行在JVM上的,所以可以直接使用Java库,与Java代码无缝集成...

    scala学习资料

    - Scala与其他技术的结合:如Spark、Akka等,学习如何在实际项目中应用Scala。 总的来说,Scala是一种强大的工具,它的设计哲学是提供一种既能充分利用面向对象编程的优势,又能发挥函数式编程优点的语言。通过学习...

    scala-learn:scala学习笔记

    本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...

    scala讲解笔记 入门及进阶 PDF文档1-5

    第四部分:"Scala入门及进阶-part04-Akka Actor.pdf" 专注于Scala与Akka框架的集成,Akka是用于构建高度并发、分布式和容错系统的工具。Actor模型在Akka中扮演核心角色,这部分将解释Actor如何工作,以及如何创建、...

    Scala-Tutorial:Scala语法学习笔记与程式码范例from 韩顺平老师教学

    Scala是一种多范式的编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种简洁、类型安全且高性能的...通过学习,你可以熟练掌握Scala语言,应用于大数据处理、分布式计算以及构建高并发、高可用的应用系统。

    spark源码阅读笔记

    这是Spark集群管理中最核心的部分之一,Akka Actor Model用于实现高度并发和容错的分布式应用。 5. **等待系统终止**:最后一步是通过`actorSystem.awaitTermination()`等待整个系统结束。在此期间,Master节点将...

    java并发框架源码-notes:记录各种学习笔记(Java、算法、框架、数据库、并发、源码...)

    分析如`Akka`、`Quasar`或`Disruptor`等并发框架的源码,可以深入理解如何在Java中构建高效的并发系统,学习其设计思想和最佳实践。 通过阅读和研究这些源码,开发者不仅可以提升对Java并发编程的理解,还能学习到...

    《IT学习资料3》-Java架构师学习.zip

    首先,我们来看"ConcurrentProgrammingStudyNotes",这可能是一份关于Java并发编程的学习笔记。并发编程涉及线程管理、同步机制、锁、并发容器、并发工具类等内容。Java提供了丰富的API来支持并发,如`java.util....

    scala笔记:学习scala时的笔记

    1. **基本语法与类型系统**: - Scala是强类型语言,变量声明时必须指定类型,但可以使用类型推断简化编写。 - `val`用于声明不可变变量,`var`用于声明可变变量。 - 类型系统包括基本类型(如Int, Double, ...

    学习scala好的项目

    在"scala-study"这个文件夹中,可能包含的子文件有练习代码、笔记、教程文档等,这些都是学习过程中的宝贵资料。通过这些资源,初学者可以逐步了解如何使用Scala编写Spark程序,包括如何创建SparkSession、加载数据...

    Scala程序设计(第2版)英文原版Programming.Scala.2nd.Edition.2014.12.pdf

    Dean Wampler博士作为本书的作者之一,是Typesafe公司的大数据架构师,主要使用Scala、函数式编程、Spark、Hadoop和Akka构建数据中心工具和服务。他的其他作品包括《Java开发者函数式编程》的作者以及《Programming ...

    快学Scala 第2版.zip

    这本书的中文完整版包含高清扫描和书签功能,使得读者可以轻松查找和学习相关内容,而且文字可选择复制,方便笔记和后续查阅。 Scala在大数据领域扮演着重要角色,主要归功于它与Apache Spark的紧密集成。Spark是一...

    管理系统练习.zip555

    这个压缩包中的两个文件,"一、CRM笔记.md"和"二 、CRM笔记.md"(可能其中一个文件名有误,此处假设它们是不同的笔记),都是Markdown格式的文档,通常用于记录学习心得或教程。 首先,我们来深入了解一下CRM系统。...

    尚硅谷_韩顺平_Scala语言核心编程_PDF密码解除1

    1. **学习Scala的原因**: Scala的出现主要是为了解决Java等传统编程语言在处理并发、复杂数据结构和模式匹配等方面的问题。它的设计目标是提高代码的可读性和可维护性,同时提供强大的类型系统和表达能力,使得...

    Scala笔记Markdown版本(至集合章节)

    **1. Scala简介** Scala由Martin Odersky在2003年设计,目标是创建一种既具有静态类型安全性又能支持敏捷开发的语言。它运行在Java虚拟机(JVM)上,可以无缝地与Java代码交互,同时也提供了比Java更高级的语法结构...

Global site tag (gtag.js) - Google Analytics