感觉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包