クラスタでシャーディングを使用してakkaのPersistentActorを使用して自分の状態を追跡します。私は、私は次のコード経由で更新することができます「ルーム」を持っている:akka persist関数は毎回処理されません
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"))
}
}
問題は、予想通りの機能の残りの部分が動作しながら、他のすべての時間を働くだけ持続ものです。 (「作品」はたびに印刷され、「これは必ずしも発射されない」、お互いに2回)。 私はイベントを保存するためにupdateコマンドを2回起動する必要がありますが、それは両方のコマンドが実行された時点で保存されているようです。
akka persistの重要な部分が欠落していますか?