假设我重写了preStart钩子并发送消息给self:
Class SomeActor extends Actor {
override def preStart(): Unit = {
self ! SomeMessage
}
...
}
Run Code Online (Sandbox Code Playgroud)
我能指望这SomeMessage将成为队列中的第一条消息吗?
Rol*_*uhn 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
}
Run Code Online (Sandbox Code Playgroud)
您需要混合akka.actor.Stash特征并配置此actor以使用a DequeBasedMailbox.
| 归档时间: |
|
| 查看次数: |
3371 次 |
| 最近记录: |