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