akka - noonecare/spark GitHub Wiki
akka 是 scala 标准的并发库。scala 隐藏了 thread, 异步IO 抽象出 actor(类似于一个邮箱), 通过 actor 之间收发 message 来完成各个 actor 之间的交互。
akka 中重要的概念以及问题:
- Actor
- actor ref
- actor path
- actor context
- parent and child, supervisor
- sender, mailbox
- Actor System
- message
- message 是传递给 ActorRef 的,不是传给 Actor 的
- 任何类型的数据都可以成为 message
- 常常用 case class 类型的数据作为 message
-
scheduler 定时器
-
ActorLogging 给 Actor 记日志
-
Futures
-
Router 管理一组 actor(本身也是 actor), akka 就是一群 actor 之间相互收发消息,也是个消息队列。为了管理消息引入了 Router。
-
Dispatcher and MailBox 主要是跟 Actor 的部署有关,特别的 Actor 可以部署在远程,通过 TCP/UDP 来连接(通过 netty 实现)。这使得 Akka 可以提供 web service, 同时使得 akka 很容易实现 scalable。
-
NetWork IO
-
Multi-Node and Remote Actors 就是通过合理的部署实现 Remote Actor 的。
-
Agents Agents 是特殊的 actors, actor 一般都不开放自己的内部数据,但是 Agent 会开放自己一些内部数据,供其他 actor 修改。agents 常见的例子是做 Counters。
-
DataFlow(似乎在新版的 akka 中已经不常用了)
-
FSM (有限状态机,akka 中一种很贴合状态机写法的 framework)
Program reactively
- Test && Debug
akka 配置文件: 很多配置可以直接写到配置文件中,不必都写到源码中。
可以把配置文件命名为 application.conf 放在 src/main/resources 目录下。这样程序运行时,就会读取这些配置。
ActorSystem is the only consumer of configuration information. ActorSystem 默认会读取 classpath 下所有 application.conf, applicatin.json, application.properties 的配置。akka 支持的配置文件的格式称为 HOCON。
configuration 配置的内容一般是: 日志 dispatcher mailbox supervisorStrategy
或者是这些方面的默认配置。