Ich bin ein Schauspieler mit mehreren Zuständen implementieren und Stash
verwenden, um keine Nachrichten zu verlieren. Meine Zustände initialisieren (etwas von der DB holen), laufen (Anfragen bearbeiten) und aktualisieren (meinen Zustand aktualisieren). Mein Problem ist, dass ich die Nachrichten verliere, wenn ich versuche unstashAll()
in Zukunft zu lösen.akka unstashAlle funktioniert nicht
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()}
ich es feste meine Implementierung durch die Umstellung auf diese
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()}
kann mir jemand erklären, warum die erste Arbeit nicht?