Ich benutze akkas PersistentActor mit sharding in einem Cluster, um meinen Zustand zu verfolgen. Ich habe einen ‚Room‘, die ich über folgenden Code aktualisieren:akka Persist-Funktion wird nicht jedes Mal behandelt
case UpdateRoom(id, room, userId) => ((ret: ActorRef) => {
(userRegion ? GetRoleForRoom(userId, id)).mapTo[String] map { role =>
if (role == "owner") {
state = Some(room)
ret ! Success(room)
eventRegion ! RoomEventPackage(id, RoomUpdated(room))
println("works")
persist(RoomUpdated(room))(e => println("this doesn't always fire")
} else {
ret ! Failure(InsufficientRights(role, "Update Room"))
}
}
Problem ist, dass nur persist jede andere Zeit, während der Rest der Funktion arbeitet wie erwartet funktioniert. ("Werke" werden jedes Mal gedruckt, "das feuert nicht immer", sondern zweimal). Ich muss immer den Update-Befehl zweimal auslösen, um mein Event zu speichern, aber dann scheint es für beide Male gespeichert zu sein, dass ich den Befehl abgefeuert habe.
Fehle ich einen wichtigen Teil von akka persist?