Постоянство Akka: удаление старых сообщений в журнале

Очистить старые снимки в хранилище снимков очень просто: после каждого успешного снимка актор получает saveSnapshotSuccess с метаданными, указывающими его порядковый номер, эту информацию можно использовать для создания снимка SnapshotSelectionCriteria, а затем передать его deleteSnapshots.

Однако нет эквивалента saveSnapshotSuccess для сохраняемых сообщений. Таким образом, невозможно узнать порядковый номер «последнего» сообщения в журнале. Потенциально можно сохранить локальный кеш количества сохраненных сообщений и сделать снимок, чтобы использовать его для вызова deleteMessages, но это слишком утомительно.

Есть ли способ использовать persistence-query для получения последнего сохраненного сообщения для актера, чтобы получить указание на то, что такое порядковый номер, а затем, возможно, вызвать deleteMessages, скажем, val seqNr = sequenceNumberObtainedFromReadJournal - 100, (при условии, что мы сделали снимок состояния актера, скажем, после каждых 50 Сообщения)?

P.S. Выбор порядкового номера для перехода к deleteMessages, конечно, немного сложнее, чем упомянуто выше: даже если есть способ получить порядковый номер последнего сообщения для актера из журнала, нужно побеспокоиться о вероятность того, что последние три моментальных снимка оказались неудачными, поэтому это не так просто, как просто использовать 100 и 50), поэтому реализация будет немного сложнее, но, по крайней мере, мы не загрязняем тип моментального снимка счетчиком последовательности сохраняемости.< /эм>


person ShS    schedule 16.08.2017    source источник


Ответы (1)


Вы можете просто вызвать lastSequenceNr из своего постоянного актора.

person ghostdogpr    schedule 18.09.2017