Scala 开始前的钩子:给演员本身的信息
假设我覆盖了Scala 开始前的钩子:给演员本身的信息,scala,akka,Scala,Akka,假设我覆盖了preStart钩子,并向self发送了一条消息: Class SomeActor extends Actor { override def preStart(): Unit = { self ! SomeMessage } ... } 我是否可以预期SomeMessage将是队列中的第一条消息?否,因为参与者创建是异步进行的,可能有人在构造函数或preStart实际运行之前将消息排入队列。如果您需要确保在任何其他消息之前处理此消息,则需要使用been和s
preStart
钩子,并向self
发送了一条消息:
Class SomeActor extends Actor {
override def preStart(): Unit = {
self ! SomeMessage
}
...
}
我是否可以预期
SomeMessage
将是队列中的第一条消息?否,因为参与者创建是异步进行的,可能有人在构造函数或preStart
实际运行之前将消息排入队列。如果您需要确保在任何其他消息之前处理此消息,则需要使用been
和stash
:
self!消息
def接收=初始
def初始值:接收={
case SomeMessage=>
//做事
unstashAll()
上下文将被初始化
案例=>stash()
}
def已初始化:接收={
//你的正常行为
}
您需要混合使用akka.actor.Stash
特性,并将此actor配置为使用DequeBasedMailbox