清理快照存储中的旧快照很简单:每次成功完成快照后,actor会收到一个saveSnapshotSuccess
,其中元数据指示其序列号,此信息可用于构建快照{{1}然后被送到SnapshotSelectionCriteria
。
但是,对于持久消息,没有等效的deleteSnapshots
。因此,无法知道" last-ish"的序列号是什么。消息在日记中。有人可能会保留持久消息的本地缓存并对其进行快照,以用于调用saveSnapshotSuccess
,但这太繁琐了。
是否有办法使用deleteMessages
接收最后一个持久消息,让演员得到序列号是什么,然后用persistence-query
调用deleteMessages
, (假设我们对演员的状态进行了快照,比如说每50条消息之后)?
P.S。 传递给val seqNr = sequenceNumberObtainedFromReadJournal - 100
的序列号的选择当然比上面提到的要复杂一点:即使有一种方法可以从日志中获取演员的最后一条消息的序列号,我不得不担心最后三个快照失败的可能性,所以它不像使用100和50那么简单,所以实现会更复杂,但至少我们不会污染快照输入持久性序列计数。
答案 0 :(得分:2)
您只需从持久演员中调用lastSequenceNr
即可。