假设我覆盖了preStart钩子并将消息发送到self:
Class SomeActor extends Actor {
override def preStart(): Unit = {
self ! SomeMessage
}
...
}
我可以期望这SomeMessage将是队列中的第一条消息吗?
不,因为 Actor 创建是异步发生的,有人可能在构造函数或preStart实际运行之前将消息排入队列。如果您需要确保在任何其他消息之前处理此消息,那么您将需要使用becomeand 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.