1.什么是Akka
Akka通常是指一个分布式工具集,用于协调远程计算资源来进行一些工作,是Actor开发模型的一种现代化实现。
2.Actor 重要概念与消息传递方式
重要概念
1.Actor:一个表示工作节点的并发原语,同步处理接收到的消息,Actor可以保存并修改内部状态。
2.消息: 用于跨进程(多个Actor之间)通信的数据
3.消息传递:一种软件开发范式,通过传递消息来触发各种行为,而不是直接触发行为。
4.邮箱地址:消息传递的目标地址,当Actor空闲时会从该地址获取信息进行处理。
5.邮箱:在Actor处理消息前具体存储消息的地方,可视作消息队列。
6.Actor系统:多个Actor的集合及这些Actor的邮箱地址、邮箱和配置。
消息传递方式:邮箱
Actor与对象的不同之处在于其不能直接读取、修改或调用,Actor只能通过消息传递方式与外界进行通信。消息传递是指一个Actor可以接受消息,本身可以发送消息,也可以对接收到的消息做出回复。消息传递是异步的,Actor处理一个消息是同步的。
Actor模型的优势:
1.当各个Actor各司其职时,使用Actor模型分析并发时间非常容易。
2.消除内存共享状态,避免竞态条件发生。
3.Actor监督机制
Actor模型通过监督机制提供容错性。监督机制基本上是指把处理响应 错误的责任交给出错对象之外的实体,这意味着一个Actor可以负责监督它的子Actor,它会监控子Actor的运行错误 ,并根据子Actor生命周期中的运行表现执行相应的操作。当一个正在运行的Actor发生错误时,监督机制提供的默认处理方式是重新启动发生错误Actor(实际上是重新创建),这种重新创建出错Actor的处理方式基于一种假设:意外发生的错误是由错误状态导致的,因此移除并重新创建应用程序中出错的部分可以将其修复,并恢复正常工作。
Akka对于Actor模型的重要贡献之一就是位置透明性概念:就是说一个Actor邮箱地址实际上是一个远程地址,但是这个地址对开发者来说基本上是透明的。
注:
build.sbt ############################################### name := " xxx" version := "xxx" scalaVersion := "xxx" resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/release/" libraryDependencies ++= Seq("com.typesafe.akka" %% "akka-actor" % "2.6.3", "com.typesafe.akka" %% "akka-testkit" % "2.6.3", "org.scalatest" %% "scalatest" % "3.0.1" ) //使用Akka Testkit时可以使用sbt测试用例,先clean后test