2013-05-02 44 views
7

比方说,我重写preStart钩和发送消息到self起动前钩:一条消息,演员本身

Class SomeActor extends Actor { 

    override def preStart(): Unit = { 
    self ! SomeMessage 
    } 

    ... 

} 

我能想到的是SomeMessage将在队列中的第一条消息?

回答

25

不,因为actor的创建是异步发生的,所以有人可能会在构造函数或preStart实际运行之前将消息排入队列。如果您需要确保在任何其他这种消息的处理,那么你就需要使用becomestash

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