¿Cómo habilito la purga de persistencia?
Flo-Lang está construido sobre el Akka Event-Sourced Domain model. A lo largo de un flujo, los eventos de dominio (y opcionalmente snapshots) se persisten en la base de datos por el Akka Persistence Plugin configurado. Puedes configurar tu EventSourcedBehaviour para indicar al Persistence Plugin que cree snapshots y elimine eventos. Esto puede ayudar a asegurar un rendimiento consistente de la base de datos y evitar el riesgo de que una base de datos quede no disponible por llenar todo el almacenamiento disponible.
Al construir una clase de dominio, la funcionalidad de creación de snapshots y eliminación de eventos para tus flujos puede ser controlada usando una implementación de la interfaz BehaviourExtensions. Hay tres opciones que pueden usarse para implementar esta funcionalidad:
-
Usar la clase DefaultBehaviourExtensions
-
Extender la clase DefaultBehaviourExtensions
-
Crear tu propia implementación de BehaviourExtensions
La interfaz BehaviourExtensions controla si tu dominio construido indica al Akka Persistence Plugin crear snapshots y eliminar eventos. Las escrituras reales en la base de datos están controladas por el plugin de persistencia de Akka que haya sido configurado.
| Consulta Journal and Snapshot Purging para más información sobre cómo configurar la purga con el IPF Akka Persistence Plugin para MongoDB. Cuando utilices un Persistence Plugin diferente, consulta la documentación oficial de Akka para información sobre cómo cada plugin maneja la persistencia y eliminación de documentos. |
Usando la clase DefaultBehaviourExtensions
Por defecto, al construir una clase de dominio, se proporciona una instancia de la clase DefaultBehaviourExtensions. Esta clase puede ser controlada a través de configuración para habilitar la creación de snapshots después de persistir un evento terminal, y para habilitar la eliminación de eventos después de que un snapshot se haya persistido con éxito.
ipf.behaviour.config.persistence {
snapshot-when-terminal=false
delete-events-on-snapshot=false
}
-
snapshot-when-terminal-
Cuando está configurado a true, tu comportamiento disparará la persistencia de un snapshot después de que un evento que conduce a un estado terminal haya sido persistido con éxito en la base de datos.
-
Un estado terminal se define dentro de tu flujo MPS:
-
-
delete-events-on-snapshot-
Cuando está configurado a true, después de la persistencia exitosa de un snapshot, tu comportamiento disparará la eliminación de todos los eventos que coincidan con el persistenceId del snapshot y con un número de secuencia menor o igual que el número de secuencia del snapshot
-
| La configuración por defecto es no crear y persistir snapshots y no eliminar eventos en snapshots. Esta funcionalidad debe habilitarse explícitamente mediante configuración. |
Extendiendo DefaultBehaviourExtensions
La interfaz BehaviourExtensions es capaz de controlar más que solo la funcionalidad de snapshots y eliminación de eventos. Si deseas utilizar alguna funcionalidad adicional, como implementar un EventAdapter, mientras también utilizas la funcionalidad de purga por defecto, deberías crear una clase que extienda la clase DefaultBehaviourExtensions y suministrarla a tu dominio.
public class ExtendingDefaultBehaviourExtensions extends DefaultBehaviourExtensions {
public ExtendingDefaultBehaviourExtensions(ConfigSettings configSettings, ModelDescriptor modelDescriptor) {
super(configSettings, modelDescriptor);
}
@Override
public Optional<EventAdapter<Event, ?>> eventAdapter() {
// Your event adapter implementation
}
}
Al iniciar tu dominio, necesitarás pasar una instancia de tu clase BehaviourExtensions al EventSourcedBehaviour usando withBehaviourExtensions:
@EventListener
public void init(ContextRefreshedEvent event) {
ExtendingDefaultBehaviourExtensions myBehaviourExtensions = new ExtendingDefaultBehaviourExtensions(ConfigSettings.create(config), MyModelDescriptorBuilder.build()); (1)
new MyDomain.Builder(actorSystem)
.withEventBus(eventBus)
.withSchedulerAdapter(schedulerAdapter)
.withSystemAActionAdapter(new SampleSanctionsActionAdapter(sanctionsAdapter))
.withSystemBActionAdapter(new SampleSanctionsActionAdapter(sanctionsAdapter))
.withBehaviourExtensions(myBehaviourExtensions) (2)
.build();
}
| 1 | Instancia tu ExtendingDefaultBehaviourExtensions usando ConfigSettings y el ModelDescriptor de tu dominio |
| 2 | Suministra la instancia de ExtendingDefaultBehaviourExtensions a tu dominio |
Creando tu propia implementación de BehaviourExtensions
Puede que quieras utilizar tu propia funcionalidad de snapshots y eliminación de eventos. Para hacerlo, necesitas crear tu propia implementación de la interfaz BehaviourExtensions y suministrarla a tu dominio.
public class MyBehaviourExtensions implements BehaviourExtensions {
@Override
public Optional<Boolean> shouldSnapshot(Aggregate aggregate, Event event, long sequenceNr) {
return event instanceof BookingCompleted;
}
@Override
public Optional<Boolean> deleteEventsOnSnapshot() {
return Optional.of(false);
}
@Override
public Optional<RetentionCriteria> retentionCriteria() {
return Optional.empty();
}
@Override
public Function<Event, CompletionStage<Void>> onEventPersistenceForwarder() {
return null;
}
@Override
public Optional<EventAdapter<Event, ?>> eventAdapter() {
return Optional.empty();
}
}
Al iniciar tu dominio, necesitarás pasar una instancia de tu clase BehaviourExtensions al EventSourcedBehaviour usando withBehaviourExtensions:
@EventListener
public void init(ContextRefreshedEvent event) {
new MyDomain.Builder(actorSystem)
.withEventBus(eventBus)
.withSchedulerAdapter(schedulerAdapter)
.withSystemAActionAdapter(new SampleSanctionsActionAdapter(sanctionsAdapter))
.withSystemBActionAdapter(new SampleSanctionsActionAdapter(sanctionsAdapter))
.withBehaviourExtensions(new MyBehaviourExtensions()) (1)
.build();
}
| 1 | Suministra la instancia de MyBehaviourExtensions a tu dominio |
En este ejemplo de implementación, tu dominio disparará la creación de un snapshot cuando un evento de instancia BookingCompleted sea persistido con éxito, y el dominio no disparará la eliminación de eventos después de persistir el snapshot.