Я реализую актера с несколькими состояниями и используя Stash
, чтобы не потерять сообщений. Мои состояния инициализируются (получают что-то из БД), запускают (обрабатывают запросы) и обновляются (обновляя мое состояние). Моя проблема в том, что я теряю сообщения, когда я пытаюсь выполнить unstashAll()
в будущем решении.akka unstashAll не работает
def initializing: Receive = {
case Initialize =>
log.info("initializing")
(for {
items1 <- db.getItems("1")
items2 <- db.getItems("2")
} yield items1 ::: items2) map {items =>
unstashAll()
context.become(running(items))
}
case r =>
log.debug(s"actor received message: $r while initializing and stashed it for further processing")
stash()}
я установил ее, изменив свою реализацию этого
def initializing: Receive = {
case Initialize =>
log.info("initializing")
(for {
items1 <- db.getItems("1")
items2 <- db.getItems("2")
} yield items1 ::: items2) pipeTo self
context.become({
case items: List[Item] =>
unstashAll()
context.become(running(items))
case r =>
log.debug(s"actor received message: $r while initializing and stashed it for further processing")
stash()
})
case r =>
log.debug(s"actor received message: $r while initializing and stashed it for further processing")
stash()}
может кто-нибудь объяснить, почему первый не работает?