2013-05-02 13 views
7

Powiedzmy zastąpić hak preStart i wysłać wiadomość do self:Prestart haczyk: komunikat dla samego aktora

Class SomeActor extends Actor { 

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

    ... 

} 

mogę się spodziewać, że SomeMessage będzie pierwszą wiadomość w kolejce?

Odpowiedz

25

Nie, ponieważ tworzenie aktorów odbywa się asynchronicznie, ktoś mógł zagnieździć wiadomość przed uruchomieniem konstruktora lub preStart. Jeśli potrzebujesz, aby zapewnić przetwarzanie tej wiadomości zanim jakakolwiek inna następnie trzeba użyć become i 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 
} 

Musisz mieszać w cechy akka.actor.Stash i skonfigurować tego aktora do używania DequeBasedMailbox .

Powiązane problemy