java中的Actor模式 Akka實例

感覺Actor模式和麪向對象都把現實世界抽象成一個很簡單的模式。都是很牛逼的一種哲學思想

簡單的說,

面向對象是把所有的東西都抽象成對象。

Actor是吧所有的消息傳遞抽象成一種抽象的模式。


下面看看java中是如何實現Actor模式的


以下就是一個非常簡單的Akka例子:

package com.yonder.akka.test;

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;

/**
 * @author cyd
 * @date 2015-3-24
 */
public class ActorSystemTools {

	private static ActorSystem actorSystem = null;
	
	public static void start() {
		System.out.println("start actorSystem...");
		actorSystem = ActorSystem.create();
	}
	
	@SuppressWarnings("unchecked")
	public static ActorRef actorOf(Class clazz) {
		return actorSystem.actorOf(Props.create(clazz));
	}
	
	public static void shutdown() {
		System.out.println("shutdown actorSystem...");
		actorSystem.shutdown();
	}
}



package com.yonder.akka.test;

import akka.actor.UntypedActor;

/**
 * @author cyd
 * @date 2015-3-24
 */
public class AngryFoalActor extends UntypedActor {

	public void onReceive(Object message) throws Exception {
		System.out.println("AngryFoalActor receive message : " + message);
		getSender().tell("hello! I am  AngryFoalActor!", getSelf());
	}
}


package com.yonder.akka.test;

import akka.actor.UntypedActor;

/**
 * @author cyd
 * @date 2015-3-24
 */

public class LazyFoalActor extends UntypedActor {

	@Override
	public void onReceive(Object message) throws Exception {
		System.out.println("LazyFoalActor receive message : " + message);
	}
}


package com.yonder.akka.test;

import akka.actor.ActorRef;

/**
 * @author cyd
 * @date 2015-3-25
 */
public class Main {
	
	public static void main(String[] args) {
		ActorSystemTools.start();
		ActorRef angryFoal = ActorSystemTools.actorOf(AngryFoalActor.class);
		ActorRef lazyFoal = ActorSystemTools.actorOf(LazyFoalActor.class);
		angryFoal.tell("hello! I am  LazyFoalActor!", lazyFoal);
	}

}


運行結果:

start actorSystem...
AngryFoalActor receive message : hello! I am  LazyFoalActor!
LazyFoalActor receive message : hello! I am  AngryFoalActor!



上述的例子中,

ActorSystemTools是作爲Actor系統的管理類,負責Actor系統的初始化、Actor對象創建、系統的關閉

angryFoal(AngryFoalActor)、lazyFoal(LazyFoalActor)是兩個Actor對象(也就是Actor模型中消息的發送、接受者)

Main就是整個例子的入口


例子中系統啓動後發送一個消息 "hello! I am  LazyFoalActor!" 給angryFoal,消息發送者是lazyFoal。

angryFoal在接收到消息後,給消息的發送者發送回覆消息 "hello! I am  AngryFoalActor!"


這樣就是一個Actor消息模型的簡單例子。當然Actor模型不僅僅能處理這種簡單的消息傳遞,採用Actor來處理一些需要併發的業務邏輯也可以使一些原本需要手動來添加同步鎖的複雜邏輯變得更加簡單。Actor消息還支持跨服務器的發送,這樣就可以用Actor來進行網絡通信。具體的使用方式將在後續的文章中與大家分享探討。



akka相關的可能需要引用到的jar包:

scala-library-2.11.1.jar

akka-actor_2.11-2.3.4.jar

akka-remote_2.11-2.3.4.jar

akka-slf4j_2.11-2.3.4.jar

可以到http://www.java2s.com/Code/Jar/a/akka.htm上查找下載相關的jar包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章