假设我覆盖preStart
挂钩并向self
发送消息:
Class SomeActor extends Actor {
override def preStart(): Unit = {
self ! SomeMessage
}
...
}
我可以期待SomeMessage
成为队列中的第一条消息吗?
答案 0 :(得分:28)
不,因为actor创建是异步发生的,所以有人可能在构造函数或preStart
实际运行之前将消息排入队列。如果您需要确保在任何其他邮件之前处理此邮件,那么您需要使用become
和stash
:
self ! SomeMessage
def receive = initial
def initial: Receive = {
case SomeMessage =>
// do stuff
unstashAll()
context become initialized
case _ => stash()
}
def initialized: Receive = {
// your normal behavior
}
您需要混合使用akka.actor.Stash
特征并将此演员配置为使用DequeBasedMailbox
。