Inicjowanie aktora, zanim będzie mógł obsłużyć inne wiadomości
Mam aktora, który tworzy inny:
class MyActor1 extends Actor {
val a2 = system actorOf Props(new MyActor(123))
}
Drugi aktor musi sam zainicjować (bootstrap) po utworzeniu, a dopiero potem musi wykonać inne zadanie.
class MyActor2(a: Int) extends Actor {
//initialized (bootstrapped) itself, potentially a long operation
//how?
val initValue = // get from a server
//handle incoming messages
def receive = {
case "job1" => // do some job but after it's initialized (bootstrapped) itself
}
}
Więc pierwsza rzeczMyActor2
musi zrobić to samemu wykonać inicjalizację. Może to zająć trochę czasu, ponieważ żądanie do serwera. Dopiero po pomyślnym zakończeniu musi być w stanie obsłużyć przychodzące wiadomościreceive
. Wcześniej - nie może tego robić.
Oczywiście żądanie do serwera musi być asynchroniczne (najlepiej przy użyciuFuture
, nieasync
, await
lub inne rzeczy na wysokim poziomieAsyncHttpClient
). Wiem, jak korzystać z Future, ale to nie problem.
Jak to zapewnić?
p.s. Domyślam się, że najpierw musi wysłać do siebie wiadomość.