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包

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值