preStart
フックをオーバーライドして、にメッセージを送信するとしましょうself
:
Class SomeActor extends Actor {
override def preStart(): Unit = {
self ! SomeMessage
}
...
}
SomeMessage
それがキューの最初のメッセージになると期待できますか?
いいえ、アクターの作成は非同期で行われるため、誰かがコンストラクターの前にメッセージをキューに入れたり、preStart
実際に実行したりする可能性があります。このメッセージを確実に処理する必要がある場合は、 and を使用する必要があり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
}
akka.actor.Stash
トレイトを混ぜて、このアクターが を使用するように設定する必要がありますDequeBasedMailbox
。