一、akka简介
Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable)、弹性的(Resilient)、快速响应的(Responsive)应用程序的平台。
Actor模型:在计算机科学领域,Actor模型是一个并行计算(Concurrent Computation)模型,它把actor作为并行计算的基本元素来对待:为响应一个接收到的消息,一个actor能够自己做出一些决策,如创建更多的actor,或发送更多的消息,或者确定如何去响应接收到的下一个消息。
举例说明:
1.每名学生和每名老师都是Actor,是用来接收和发送消息,处理逻辑的;
2.老师的leader, 学生的leader, 是ActorSystem,用来创建Actor,并且监控和管理Actor;
3.ActorSystem是单例的,一个线程中只有一个即可
4.Actor是多例的,可以创建多个实例
5.Actor变成是通过消息传递实现并发的;
Actor是Akka中最核心的概念,它是一个封装了状态和行为的对象,Actor之间可以通过交换消息的方式进行通信,每个Actor都有自己的收件箱(Mailbox)。通过Actor能够简化锁及线程管理,可以非常容易地开发出正确地并发程序和并行系统,Actor具有如下特性:
1.提供了一种高级抽象,能够简化在并发(Concurrency)/并行(Parallelism)应用场景下的编程开发
2.提供了异步非阻塞的、高性能的事件驱动编程模型
3.超级轻量级事件处理(每GB堆内存几百万Actor)
二. Akka RPC程序
** 流程简图**
RPC代码实现
1 创建Master类 启动Master
1.1 指定配置(地址,端口等)
val confStr =
s"""
|akka.actor.provider = “akka.remote.RemoteActorRefProvider”
|akka.remote.netty.tcp.hostname = $masterHost
|akka.remote.netty.tcp.port = $masterPort
|""".stripMargin
1.2 解析配置
val configs: Config = ConfigFactory.parseString(confStr)
1.3创建ActorSystem对象
val actorSystem: ActorSystem = ActorSystem(MASTER_ACTOR_SYSTEM, config)
1.4创建Actor对象
val actor: ActorRef = actorSystem.actorOf(Props[MyMaster], "MASTER_ACTOR")
2.创建Worker类,启动worker
同Master类,区别在于创建ActorSystem对象时是 WORKER_ACTOR_SYSTEM.
3.master开启定时检查worker任务