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
  • 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

或者是这些方面的默认配置。