AKA学習ノートその1

2450 ワード

AKAはactorモデルに基づいて実現される同時処理フレームワークである.イベント駆動の同時処理モデルに基づいて、各actorは独自の属性と操作を有し、通常、複数のスレッド間で属性(データ)を共有するのではなくロックメカニズムで処理することを回避する.このメカニズムはscala,cloure言語によく応用され,操作と属性を独立したユニットに配置して処理し,同時処理の能力を高める.
 
次は最も簡単なhellowordをakka世界への進出の始まりとします.
機能の説明:
1つのactiorを介してメッセージを別のactiorに送信して処理結果を返すことを実現するには,2つのクラスのメソッド呼び出しのような簡単な感じがするが,ここでは実際の処理時に非同期の呼び出し処理であり,ここで不思議なことにAKAの内部メカニズムが今後深く研究されていることにある.
 
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は1つの主なactorクラスを提供して、このクラスを通じて直接以上の方法を実行することができて、eclipseの中でhelloworldクラスの中でopen run dailogeをクリックして、それからMain.classオプションにakkaを入力します.Main、argumentsを選択してプログラム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

 
実行結果から、Hello World actorがGreeter actorを正しく呼び出したのは、Hello Worldが出力されたからです!InforログからHelloWorld actorがGreeter actorの返信を正常に受信して現在のactorを停止していることがわかります.