¿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 events. 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 que se llene todo el almacenamiento disponible.

Al construir una clase de dominio, la creación de instantáneas y event La funcionalidad de eliminación 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 events. Las escrituras de la base de datos actual están controladas por cuál 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 terminal.event, y para habilitar la eliminación de events 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 configura en verdadero, su comportamiento activará la persistencia de una instantánea después de un event conduciendo a un terminal state ha sido persistido con éxito en la base de datos.

    • Un terminal state 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 events coincidiendo 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.events sobre 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 captura de instantáneas y event funcionalidad de eliminación. 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 instantánea y event funcionalidad de eliminación. Para hacer esto, usted debe 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 instantáneo cuando un event la instancia BookingCompleted se ha persistido con éxito, y el dominio no activará la eliminación de events después de persistir la instantánea.