`

AKKA浅析

阅读更多

AKKA 是一款基于actor模型实现的 并发处理框架。基于事件驱动的并发处理模型,每一个actor拥有自己的属性和操作,这样就避免了通常情况下因为多个线程之间要共享属性(数据)而是用锁机制的处理。这种机制在scala,cloure 语言中应用的很好,将操作和属性放在一个独立的单元中进行处理,从而提高并发处理的能力。

 

下面用一个最简单的helloword作为进入akka世界的开始。

功能描述:

实现通过一个actior发送消息到另一个actor然后将处理结果返回,感觉很简单类似两个类的方法调用,但是这里实际上的处理时异步的并非同步的调用处理,这里神奇的地方就在于AKKA的内部机制了后续再做深入研究。

 

HelloWorld 类

Java代码  收藏代码
  1. package com.huawei.akka;  
  2.   
  3. import akka.actor.Props;  
  4. import akka.actor.UntypedActor;  
  5. import akka.actor.ActorRef;  
  6. public class HelloWorld extends UntypedActor {  
  7.    
  8.   @Override  
  9.   public void preStart() {  
  10.     // create the greeter actor  
  11.     final ActorRef greeter =  
  12.         getContext().actorOf(Props.create(Greeter.class), "greeter");//创建greeter actor实例  
  13.     // tell it to perform the greeting  
  14.     greeter.tell(Greeter.Msg.GREET, getSelf());//通过tell方法给greeter actor 发送一条消息  
  15.   }  
  16.    
  17.   @Override  
  18.   public void onReceive(Object msg) {  
  19.     if (msg == Greeter.Msg.DONE) {  
  20.       // when the greeter is done, stop this actor and with it the application  
  21.       getContext().stop(getSelf());  
  22.     } else unhandled(msg);  
  23.   }  
  24. }  

 

Greeter类

Java代码  收藏代码
  1. package com.huawei.akka;  
  2.   
  3. import akka.actor.UntypedActor;  
  4.   
  5. public class Greeter extends UntypedActor {  
  6.         
  7.       public static enum Msg {  
  8.         GREET, DONE;  
  9.       }  
  10.         
  11.       @Override  
  12.       public void onReceive(Object msg) {  
  13.         if (msg == Msg.GREET) {  
  14.           System.out.println("Hello World!");  
  15.           getSender().tell(Msg.DONE, getSelf());  
  16.         } else unhandled(msg);  
  17.       }  
  18.         
  19.     }  

 运行HelloWorld类,akka提供了一个主actor类,可以通过这个类直接执行以上的方法,在eclipse中在helloworld类中点击 open run dailoge,然后在Main.class 选项中输入akka.Main,然后选择arguments 在program arguments 中输入 com.huawei.akka.HelloWorld,点击 apply 然后运行结果如下:

Java代码  收藏代码
  1. Hello World!  
  2. [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。

 

http://www.javaworld.com/article/2078775/scripting-jvm-languages/open-source-java-projects-akka.html

分享到:
评论

相关推荐

    Learning Akka(PACKT,2015)

    Akka is a distributed computing toolkit that enables developers to build correct concurrent and distributed applications using Java and Scala with ease, applications that scale across servers and ...

    Akka.in.Action.2016.9.pdf

    Akka in Action shows you how to build message-oriented systems with Akka. This comprehensive, hands-on tutorial introduces each concept with a working example. You’ll start with the big picture of ...

    AKKA 本质 《Akka Essentials》

    Akka Essentials,学习akka很好的一本书

    akka-kryo-serialization, 基于Kryo的Akka序列化.zip

    akka-kryo-serialization, 基于Kryo的Akka序列化 akka-kryo-serialization-- Scala 和Akka基于kryo的序列化程序这个库为 Scala 和Akka提供定制的基于kryo的序列化程序。 它可以用于更高效的akka远程处理。它还可以...

    Akka 实战 akka in action v13 2014版本

    akka 实战。akka in action。v13 2014新版。 互联网技术入门必备 清晰,非扫描。

    akka java实现tcp远程调用

    akka实例 java实现tcp远程调用,一个服务端,一个客户端

    Akka 基础学习pdf中文文档

    如何使用 Akka 来构建具备高容错性、可以横向扩展的分布式网络应用程序。Akka 是一 个强大的工具集,提供了很多选项,可以对在本地机器上处理或网络远程机器上处理的 某项工作进行抽象封装,使之对开发者不可见。...

    Learning Akka

    Learning Akka Learning Akka Learning AkkaLearning Akka

    akka-actor-2.11-2.5.19-API文档-中文版.zip

    赠送jar包:akka-actor_2.11-2.5.19.jar; 赠送原API文档:akka-actor_2.11-2.5.19-javadoc.jar; 赠送源代码:akka-actor_2.11-2.5.19-sources.jar; 赠送Maven依赖信息文件:akka-actor_2.11-2.5.19.pom; 包含...

    Akka入门与实践

    如何使用 Akka 来构建具备高容错性、可以横向扩展的分布式网络应用程序。Akka 是一 个强大的工具集,提供了很多选项,可以对在本地机器上处理或网络远程机器上处理的 某项工作进行抽象封装,使之对开发者不可见。...

    Akka-in-Action.pdf

    In March 2010 I noticed a tweet by Dean Wampler that made me look into Akka: W00t! RT @jboner: #akka 0.7 is released: http://bit.ly/9yRGSB After some investigation into the source code and building a ...

    akka实例参考

    初学akka使用实例,有很好的帮助啊,可实际运行

    akka-data-replication, 在Akka集群中,复制 CRDTs.zip

    akka-data-replication, 在Akka集群中,复制 CRDTs Akka分布式数据这个库的( akka-data-replication ) 已经包含在Akka中,在模块中分发数据。英镑不在/akka-data-replication中维护。 所有 Bug 修复和新功能将在 ...

    akkajava.pdf

    Akka is here to change that. Using the Actor Model we raise the abstraction level and provide a better platform to build scalable, resilient and responsive applications—see the Reactive Manifesto ...

    Akka应用模式-分布式应用程序设计实践指南.pdf

    另外,本书介绍了 Actor 模型的一个实现框架 Akka 以及它的工具,而后讨论了在充分利用 actor 架构的基础上使用 Akka 框架来设计软件系统的方法,以及使用它来开发并发性和分布式应用程序的方怯。本书还介绍了领域 ...

    akka学习入门实践

    akka学习入门实践

    Akka Concurrency

    Akka Concurrency

    akka-stream_2.11-2.5.21-API文档-中英对照版.zip

    赠送jar包:akka-stream_2.11-2.5.21.jar; 赠送原API文档:akka-stream_2.11-2.5.21-javadoc.jar; 赠送源代码:akka-stream_2.11-2.5.21-sources.jar; 赠送Maven依赖信息文件:akka-stream_2.11-2.5.21.pom; ...

    akka in action

    Akka is a Scala-based toolkit that simplifies developing concurrent distributed applications. Akka uses Actors-independently executing processes that communicate via message passing—as the foundation...

    Applied.Akka.Patterns

    There are many resources for Java and Scala developers who want to learn Akka from a technological perspective, but knowing how to apply this technology requires a different way of thinking....

Global site tag (gtag.js) - Google Analytics