1.akka是什么?

akka是一种基于Scala的网络编程库,实现了RPC框架。spark在1.6之前使用的是akka进行通信,1.6及以后是基于netty。现阶段的Flink是基于Akka+Netty。如果需要了解Spark或者Flink的网络通信,就必须得从akka开始。

2.Akka中的方法

主类是在akka.actor.Actor,Endpoint 有三个重要的声明周期方法:

  • prestart():对象实例初始化之后自动执行
  • receive(): 核心业务功能处理就在这里了
  • postStop():对象实例销毁之前自动调用执行

3.简单样例

object SenderActorObject extends Actor {println("1231231")// 当Actor初次被调用化时override def preStart(): Unit = {println("abcdef")println("执行SenderActorObject PreStart()方法")}override def receive: Receive = {case "start" =>val receiveActor = this.context.actorSelection("/user/receiverActor")// 向第二个actor发送消息receiveActor ! SubmitTaskMessage("请完成#001任务!")case SuccessSubmitTaskMessage(msg) =>println("21312312")println(s"接收到来自${sender.path}的消息: $msg")}}object ReceiverActor extends Actor {override def preStart(): Unit = {print(1231)println("执行ReceiverActor()方法")}// 执行receive方法前会先执行preStart方法override def receive: Receive = {case SubmitTaskMessage(msg) =>println(s"接收到来自${sender.path}的消息: $msg")// 又向第一个sender发送消息sender ! SuccessSubmitTaskMessage("完成提交")case _ => println("未匹配的消息类型")}
}object SimpleAkkaDemo {def main(args: Array[String]): Unit = {// 创建一个actor系统val actorSystem = ActorSystem("SimpleAkkaDemo", ConfigFactory.load())//创建一个actorval senderActor: ActorRef = actorSystem.actorOf(Props(SenderActorObject), "senderActor")//创建一个actorval receiverActor: ActorRef = actorSystem.actorOf(Props(ReceiverActor), "receiverActor")println("abcdefghij")receiverActor ! "asda"println("afafa")// 使用actor的引用向actor发送消息senderActor ! "start"}
}

说明:

  1. ActorSystem 是管理 Actor生命周期的组件, Actor是负责进行通信的组件
  2. 每个 Actor 都有一个 MailBox,别的 Actor 发送给它的消息都首先储存在 MailBox 中,通过这种方式可以实现异步通信。
  3. 每个 Actor 是单线程的处理方式,不断的从 MailBox 拉取消息执行处理,所以对于 Actor 的消息处理,不适合调用会阻塞的处理方法。
  4. Actor 可以改变他自身的状态,可以接收消息,也可以发送消息,还可以生成新的 Actor
  5. 每一个ActorSystem 和 Actor都在启动的时候会给定一个 name,如果要从ActorSystem中,获取一个 Actor,则通过以下的方式来进行 Actor的获取:akka.tcp://asname@bigdata02:9527/user/actorname
  6. 如果一个 Actor 要和另外一个 Actor进行通信,则必须先获取对方 Actor 的 ActorRef 对象,然后通过该对象发送消息即可。
  7. 通过 tell 发送异步消息,不接收响应,通过 ask 发送异步消息,得到 Future 返回,通过异步回到返回处理结果。

注意以下几点:

  1. spark rpc生命周期方法:onStart()、receive()、onStop()
    akka rpc生命周期方法:preStart()、receive() 、postStop()
  2. 当一个actor被初始化时,会直接执行这个object中的非方法中的代码。当被ActorSystem调用时,会执行其preStart()方法。当有接收到消息后,会执行receive方法。
  3. 可以使用以下方式给某个指定的Actor发送消息:
    //与master建立连接
    selection = context.actorSelection("akka.tcp://MasterActorSystem@localhost:1111/user/MasterActor")
    //向master注册信息
    selection ! Conf(workerId, 2040, 4)

    也可以使用以下方式给发送者返回消息:

    sender() ! Confed
  4. 定时任务:
    /*** initialDelay: FiniteDuration, 多久以后开始执行* interval:     FiniteDuration, 每隔多长时间执行一次* receiver:     ActorRef, 给谁发送这个消息* message:      Any  发送的消息是啥** 每隔4秒钟给自己发送SendMessage*/
    import scala.concurrent.duration._
    import context.dispatcher
    context.system.scheduler.schedule(0 millis, 4000 millis, self, SendMessage)

Akka(一):Akka的基本使用相关推荐

  1. Akka介绍(Akka 1)

    1  Akka介绍 Akka运行在JVM上,能够构建高并发.分布式和高弹性的消息驱动应用程序的一个工具套件.Akka具有异步.高性能.扩展性等特性. 1.1     异步        异步能够对单一 ...

  2. akka java_java – Akka和Spring集成

    我想让akka使用spring应用程序.这是一款完全符合akka模型的搜索应用程序.关于此集成的大多数在线示例和类型安全示例都讨论了使用akka扩展来注入spring应用程序上下文.但是,它们都使用A ...

  3. akka mysql_Spray + Akka高性能异步IO并发

    Spray + Akka高性能异步IO并发 如何使用Java建立像Node.js那样非堵塞异步事件并发IO服务器呢?Spray是基于NIO2高并发框架,虽然Tomcat 8也是基于NIO2,但是Spa ...

  4. 【Akka】Akka 学习 akka 两本书的读后感

    1.概述 我在学历akka两本书的时候,读后感如下. 首先是读取了< Akka实战:快速构建高可用分布式应用.pdf> 这本书非常的不错,从浅到深,讲解的也比较细.是一本入门的好书籍,缺点 ...

  5. 【akka】akka源码 Akka源码分析-FSM

    1.概述 转载自己学习,建议直接看原文:Akka源码分析-FSM akka还有一个不常使用.但我觉得比较方便的一个模块,那就是FSM(有限状态机).我们知道了akka中Actor模型的具体实现之后,就 ...

  6. 【Akka】Akka Actor生命周期

    1.概述 转载:Akka Actor生命周期 用于自我学习. Actor的生命周期是使用Hooks体现和控制的,我们可以重写相关的Hooks,从而实现对Actor生命周期各环节的细粒度控制.各事件发生 ...

  7. 【Akka】Akka容错处理

    1.概述 转载:Akka容错处理 1.1 监督(Supervision) 容错(fault tolerance)概念与 Actor 相关,Actor 模型中容错处理使用叫做监督(supervision ...

  8. 【Akka】Akka 传递消息

    1.概述 转载:Akka传递消息 1.1 消息传递 Akka 有 4 种核心的 Actor 消息模式: tell .ask .forward 和 pipe. Ask:向 Actor 发送一条消息,返回 ...

  9. 【akka】Akka源码分析-local-DeathWatch

    1.概述 转载自己学习,建议直接看原文:Akka源码分析-local-DeathWatch 生命周期监控,也就是死亡监控,是akka编程中常用的机制.比如我们有了某个actor的ActorRef之后, ...

  10. 【Akka】Akka并发编程设计

    1.概述 转载:Akka并发编程设计 2. 响应式系统设计 Akka 被称为是一个响应式平台,更具体的说,它是 Typesafe 响应式平台的一部分.响应式宣言中包含了 4 个准则,也可以说是设计目标 ...

最新文章

  1. 模板网站建设过程中需要注意哪些细节问题?
  2. Python numpy生成矩阵、串联矩阵
  3. 在64位windows下使用instsrv.exe和srvany.exe创建windows服务
  4. debian8.7.1安装zabbix3.2
  5. 三种方法生成随机数之srand篇
  6. python常用单词有多少_Python常用单词
  7. Android5.0 netd架构流程
  8. python 矩量法_矩量法:β二项分布
  9. 精忠报国用计算机弹,同人精忠报国岳飞传
  10. fold/foldLeft/foldRight区别和联系
  11. ch3 电磁干扰的耦合和传播
  12. python Calendar日历模块函数介绍
  13. linux系统的种类
  14. win10 Xshell 中文无法输入问题
  15. 2022-09-15 mysql列存储引擎-语法树转换
  16. unity中凹凸贴图、法线贴图、视差贴图和位移贴图
  17. 反爬虫,看看互联网大厂是怎么玩的?
  18. Eclipse jee最新版 国内镜像较快的
  19. thinkphp5整合layuiadmin
  20. 互联网公司常用的分库分表方案【记录】

热门文章

  1. 编程语言python用什么笔记本最好_开发PC网站一般用什么编程语言
  2. 走进Vue【二】Vue3语法糖
  3. CSDN开发者周刊第 22期:谷歌 DeepMind 第四代:不学规则就可以玩游戏;图灵奖得主 Edmund Clarke 因感染“新冠”逝世;
  4. Matlab建模—导弹追踪问题
  5. TiDB Sysbench 性能对比测试报告 - v5.1.4 对比 v6.0.0 DMR
  6. Quartus 器件库的添加方法
  7. 华为鸿蒙系统研发团队,华为鸿蒙OS系统不再孤单!中兴近四千名员工:全力研发国产系统...
  8. MySQL之——安装 mysql.slave_master_info表不存在的解决方法
  9. 智慧社区养老解决方案——苏州新导智能
  10. 华为服务器怎么安装win7系统,远程服务器安装win7系统