上一节讲到actor是actor system最基本的单元。这一节详细的讲讲actor.更详细here。actor是一个拥有state,behavior,mailbox,children,supervisor strategy的容器.Akka保证所有actor都只运行在自己的轻量级线程,并一次处理一个消息,这样程序员就不用处理同步、竞态
Actor Reference
为了防止actor对象被直接的访问和操作,所以actors通过ActorRef来间接交流。message可以通过如下方式传递:
- ! (“tell”) - 发送message并马上返回
- ? (“ask”) - 发送message并返回Future
详见here
State
actor拥有的一组变量,即actor的state。state是可恢复的,详见Persistence
Behavior
actor处理消息的方法吧~
Mailbox
所有收到的消息,会进入actor的mailbox队列。默认是FIFO。
Children
每一个actor,都是潜在的监控者。actor会自动监控执行子任务的actor.children被放在context中,通过context.actorof(...))
或者context.stop(child))
操作children.这些操作都是异步的,所以相应非常快。
Supervisor Strategy
actor一旦创建,监控策略是不可修改的。Akka自动帮我们处理错误故障。具体的错误策略详见错误的监督和监控
当Actor终止时
一旦actor意外终止,比如失败了。它会释放所有资源,将未处理的messages发送给system的dead letter mailbox.这些message将由EventStream处理。
为什么不把dead letter全部丢掉呢?dead letter主要用来debug