1. 程式人生 > >Akka之Hello World

Akka之Hello World

Akka介紹

Actor介紹

在使用Akka進行並行程式開發時,我們的關注點不線上程,因為執行緒排程已經被Akka框架進行封裝,我們關注一個全新的執行單元,就是Actor,Actor物件之間的交流和一般的物件的函式呼叫不一樣,它們是通過顯示的訊息傳送來傳遞資訊的

hello world

1、第一個Actor的實現

繼承UntypedActor,注意這個是無型別的

public class Greeter extends UntypedActor{

    //訊息型別:歡迎、完成
    public static enum Msg{
        Greet,DONE;
    }
    @Override
public void onReceive(Object msg) throws Exception { if(msg==Msg.Greet){ //當收到GREET訊息時,列印"Hello World" System.out.println("Hello World"); getSender().tell(Msg.DONE, getSelf());//,並向訊息傳送方傳送DONE資訊 }else { unhandled(msg);//沒有收到就不處理 } } }

2、與Greeter交流的另一個Actor:HelloWorld

public class HelloWorld extends UntypedActor{

    ActorRef greeter;


    //該方法在Actor啟動前,會被Akka框架呼叫,完成初始化的工作
    @Override
    public void preStart() throws Exception {
        //使用HelloWorld上下文建立Greeter的例項
        greeter=getContext().actorOf(Props.create(Greeter.class),"greeter"
); System.out.println("Greeter Actor Path:"+greeter.path()); greeter.tell(Greeter.Msg.Greet, getSelf()); } @Override public void onReceive(Object msg) throws Exception { if(msg==Greeter.Msg.DONE){ //當收到DONE訊息,再給greeter傳送Greeter訊息,然後將自己停止 greeter.tell(Greeter.Msg.Greet, getSelf()); getContext().stop(getSelf()); }else{ unhandled(msg); } } }

主函式

建立了ActorSystem ,表示管理和維護Actor的系統,ActorSystem.create( )第一個引數”Hello”是系統名稱,第二個引數是配置檔案

public class HelloMainSimple {
     public static void main(String[] args) {
        ActorSystem system=ActorSystem.create("Hello",ConfigFactory.load("samplehello.conf"));
        ActorRef a=system.actorOf(Props.create(HelloWorld.class),"helloWorld");
        System.out.println("HelloWorld Actor Path:"+a.path());
    }
}

注意不要在Actor內執行耗時操作,這樣會導致其他Actor的排程出現問題

參考:《Java高併發程式設計》