Akka之Hello World
阿新 • • 發佈:2018-12-25
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高併發程式設計》