深入探索 Akka 演员模型:从基础到高级应用
1. SARAH 与插件架构
SARAH 采用插件架构,针对每个主要功能领域都有对应的插件,例如电子邮件插件、Facebook 插件、Twitter 插件等。每个插件通常有一个父演员(Actor),必要时会将工作委托给子演员。所有这些插件都在一个 ActorSystem 下运行。当 SARAH 启动时,它会使用特定方法启动 ActorSystem,启动后会创建三个主要演员,分别命名为 brain、ears 和 mouth,然后启动其插件。
这里有一个有趣的实验:移除 Main 对象末尾的 system.shutdown 行,你会发现应用程序不会终止,因为演员和系统仍在运行。若要终止应用程序,可按 Control - C。
2. ActorRef 的特性与使用
当在 ActorSystem 上调用 actorOf 方法时,它会异步启动演员并返回一个 ActorRef 实例。这个引用就像是演员的“句柄”,可以看作是你与实际演员之间的一个外观(façade)或代理(broker)。它能防止你做出破坏演员模型的操作,比如直接访问 Actor 实例并尝试直接修改变量。这类任务应该通过向演员发送消息来完成,而 ActorRef 的这种“不干涉”方式有助于强化正确的编程实践。
Akka 文档指出 ActorRef 具有以下特性:
- 它是不可变的。
- 它与所代表的 Actor 具有一对一的关系。
- 它是可序列化的,并且支持网络操作,这使得你可以在网络中传递 ActorRef。
3. 创建带参数构造函数的演员
有时候,你可能想创