当前访客身份:游客 [ 登录  | 注册加入尚学堂]
直播
新闻资讯

hello akka入门示例

我来了! 发表于 2年前  | 评论(0 )| 阅读次数(1579 )|   0 人收藏此文章,   我要收藏

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

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

功能描述:

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

HelloWorld 类

 
 package  com.test.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) {  
         
      getContext().stop(getSelf());  
    }  else  unhandled(msg);  
  }  
} 



Greeter类

 package  com.test.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.test.akka.HelloWorld,点击 apply 然后运行结果如下:

Java代码 收藏代码
  1. Hello World!  
  2. [INFO] [ 09 / 15 / 2014 10 : 16 : 33.003 ] [Main-akka.actor. default -dispatcher- 5 ] [akka:   

从运行结果可以看出,HelloWorld actor正确的调用了 Greeter actor 因为输出了 Hello World!从Infor日志可以看出 HelloWorld actor 正常接收到了 Greeter actor 的返回停止了当前actor。

分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183