Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。
Actor模型并非什么新鲜事物,它由Carl Hewitt于上世纪70年代早期提出,目的是为了解决分布式编程中一系列的编程问题。其特点如下:
首先通过一个简单的例子快速简单的介绍AKKA actor 是如何实现和使用的。
创建简单的 Actor 模式应用程序,定义EchoServer如下代码所示,EchoServer类继承 AKKA 中的 Actor 类,定义偏函数(Partial Function)receive,receive 函数中通过模式匹配(Pattern Match)实现程序逻辑。
1 package foo 2 3 import akka.actor.{ Actor, ActorSystem, Props} 4 import akka.event.Logging 5 6 object test extends App { 7 8 val system = ActorSystem() 9 10 class EchoServer extends Actor { 11 val log = Logging(context.system,this) 12 def receive = { 13 case msg: String => println("echo " + msg) 14 } 15 } 16 17 val echoServer = system.actorOf(Props[EchoServer]) 18 echoServer ! "hello!"
如上代码所示,通过 AKKA 中的 ActorSystem 对象的 actorOf 方法创建上面的 Actor1 类对象实例,返回AKKA 中的 ActorRef 类型的 EchoServer对象, echoServer对象是 EchoServer类对象实例的引用,通过 echoServer对象可以向 EchoServer类对象实例发送消息。
注意:
创建带参数构造器 Actor
1 package foo 2 3 import akka.actor.{ Actor, ActorSystem, Props} 4 import akka.event.Logging 5 6 object test extends App { 7 8 val system = ActorSystem() 9 10 class Actor2(name:String) extends Actor { 11 val log = Logging(context.system,this) 12 def receive = { 13 case "hello" => log.info(name + " echo hello " ) 14 case _ => log.info(name + " unknown msg") 15 } 16 } 17 val actor2 = system.actorOf(Props(new Actor2("tom"))) 18 19 actor2 ! "hello"
如上面代码所示,Actor2 类带有参数的构造函数,这种情况下无法使用Props[Actor2]的方式创建 actor2 对象。可以采用 call-by-name块(参考scala相关内容)的方式创建 actor2 对象
注意:
原文:http://www.cnblogs.com/sandyfog/p/3714228.html