2013-05-02 6 views
7

のは、私がpreStartフックをオーバーライドし、selfにメッセージを送信するとしましょう:事前開始フック:俳優へのメッセージ自体

Class SomeActor extends Actor { 

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

    ... 

} 

私はSomeMessageは、キュー内の最初のメッセージになることを期待することはできますか?

答えて

25

いいえ、アクターの作成が非同期的に発生するため、誰かがコンストラクターまたは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を使用するには、この俳優を設定する必要があります。

関連する問題