¿Cómo habilito la purga de persistencia?

Flo-Lang se basa en el Akka Event-Modelo de dominio de origen. A lo largo de un flujo,domain events(y opcionalmente instantáneas) se persisten en la base de datos por el configurado Akka Persistence Complemento. Puede configurar su EventSourcedBehaviour para ordenar al Plugin de Persistencia que cree instantáneas y elimine eventos. Esto puede ayudar a garantizar un rendimiento constante de la base de datos y evitar el riesgo de que una base de datos se vuelva inaccesible debido a llenar todo el almacenamiento disponible.

Al construir una clase de dominio, la funcionalidad de creación de instantáneas y eliminación de eventos para sus flujos puede ser controlada utilizando una implementación de la BehaviourExtensions interfaz. Hay tres opciones que pueden ser utilizadas para implementar esta funcionalidad:

  • Uso de la clase DefaultBehaviourExtensions

  • Ampliando la clase DefaultBehaviourExtensions

  • Creando su propia implementación de BehaviourExtensions

La interfaz BehaviourExtensions controla si sus comandos de dominio construidos Akka Persistence Plugin para crear instantáneas y eliminar eventos. Las escrituras reales en la base de datos están controladas por las que Akka Persistence El complemento ha sido configurado.

Ver Purgado de Registros y Capturas para obtener más información sobre la configuración de la purga con el IPF Akka Persistence Plugin para MongoDB. Al utilizar un Plugin de Persistencia diferente, consulte el oficial Akka documentación para obtener información sobre cómo cada complemento maneja la persistencia y eliminación de documentos.

Uso de la clase DefaultBehaviourExtensions

Por defecto, al construir una clase de dominio, una instancia de la DefaultBehaviourExtensions Se proporciona una clase. Esta clase puede ser controlada a través de la configuración para habilitar la creación de instantáneas después de persistir un evento terminal, y para habilitar la eliminación de eventos después de que una instantánea se haya persistido con éxito.

ipf.behaviour.config.persistence {
  snapshot-when-terminal=false
  delete-events-on-snapshot=false
}

*snapshot-when-terminal Cuando se configure en verdadero, su comportamiento activará la persistencia de una instantánea después de que un evento que conduzca a un estado terminal haya sido persistido con éxito en la base de datos. Un estado terminal se define dentro de su MPS flujo:

terminal states
  • delete-events-on-snapshot

    • Cuando se configura en verdadero, después de la persistencia exitosa de un snapshot, su comportamiento activará la eliminación de todos los eventos que coincidan con el persistenceId del snapshot y con un número de secuencia menor o igual al número de secuencia del snapshot.

La configuración predeterminada es no crear ni persistir instantáneas y no eliminar eventos en las instantáneas. Esta funcionalidad debe ser habilitada explícitamente a través de la configuración.

Extensión de DefaultBehaviourExtensions

La interfaz BehaviourExtensions es capaz de controlar más que solo la funcionalidad de captura de instantáneas y eliminación de eventos. Si desea utilizar alguna funcionalidad adicional, como implementar un EventAdapter, mientras también utiliza la funcionalidad de purga predeterminada, debe crear una clase que extienda la clase DefaultBehaviourExtensions y suministrarla a su 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 su dominio, deberá pasar una instancia de su clase BehaviourExtensions en el 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 Instancie sus ExtendingDefaultBehaviourExtensions utilizando ConfigSettings y el ModelDescriptor de su dominio.
2 Proporcione la instancia de ExtendingDefaultBehaviourExtensions a su dominio

Creando su propia implementación de BehaviourExtensions

Puede que desee utilizar su propia funcionalidad de instantáneas y eliminación de eventos. Para hacer esto, necesita crear su propia implementación de la interfaz BehaviourExtensions y proporcionársela a su 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 su dominio, deberá pasar una instancia de su clase BehaviourExtensions en el 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 Proporcione la instancia de MyBehaviourExtensions a su dominio

En esta implementación de ejemplo, su dominio activará la creación de un snapshot cuando un evento de instancia BookingCompleted se persista con éxito, y el dominio no activará la eliminación de eventos después de persistir el snapshot.