2017-08-16 4 views
3

Nettoyage des anciens instantanés dans le magasin de clichés est facile: Après chaque instantané réussi, l'acteur reçoit un saveSnapshotSuccess avec les méta-données indiquant son numéro de séquence, cette information peut être utilisée pour construire un instantané SnapshotSelectionCriteria, puis être envoyé à deleteSnapshots.Akka persistance: suppression des anciens messages dans le journal

Il n'y a cependant pas d'équivalent à saveSnapshotSuccess pour les messages persistants. En tant que tel, il n'est pas possible de savoir quel est le numéro de séquence du message "last-ish" dans le journal. On pourrait potentiellement garder un cache local des messages persistants compte et instantané, à utiliser pour appeler deleteMessages mais c'est trop fastidieux.

Est-il possible d'utiliser persistence-query pour recevoir le dernier persistait message pour un acteur pour obtenir une indication de ce que le numéro de séquence est et peut-être appeler deleteMessages avec dire val seqNr = sequenceNumberObtainedFromReadJournal - 100, (en supposant que nous SNaPshot l'état de l'acteur, dire après tous les 50 messages)?

P.S. Le choix du numéro de séquence pour passer à deleteMessages est bien sûr un peu plus compliqué que mentionné ci-dessus: même s'il existe un moyen d'obtenir le numéro de séquence du dernier message pour un acteur du journal, il faut s'inquiéter de la possibilité disons que les trois derniers snapshots ont échoué, donc ce n'est pas aussi simple que d'utiliser 100 et 50) donc l'implémentation serait un peu plus impliquée, mais au moins nous ne contaminons pas le type snapshot avec le nombre de séquences de persistance.

Répondre

1

Vous pouvez simplement appeler lastSequenceNr de votre acteur persistant.