Akka 持久性:删除日志中的"old"消息



>清理快照存储中的旧快照非常简单:每次成功快照后,参与者都会收到一个saveSnapshotSuccess,其中包含指示其序列号的元数据,此信息可用于构建快照SnapshotSelectionCriteria,然后馈送到deleteSnapshots

但是,对于持久消息,没有等效的saveSnapshotSuccess。因此,不可能知道日志中"最后"消息的序列号是什么。人们可能会保留持久消息计数的本地缓存并对其进行快照,以用于调用deleteMessages但这太乏味了。

有没有办法使用persistence-query接收最后一条持久消息,以便参与者了解序列号是什么,然后可能用val seqNr = sequenceNumberObtainedFromReadJournal - 100调用deleteMessages(假设我们快照参与者的状态,比如每 50 条消息之后(?

附言:选择传递给deleteMessages的序列号当然比上面提到的要复杂一些:即使有办法从日志中获取演员最后一条消息的序列号,也不得不担心最后三个快照失败的可能性, 所以这并不像只使用 100 和 50 那么容易(,所以实现会更复杂一些,但至少我们不会用持久性序列计数污染快照类型。

您可以简单地从持久执行组件调用lastSequenceNr

最新更新