Documentation for a newer release is available. View Latest

Definiendo el lado de lectura

El ipf-read-starter proporciona una configuración base de Mongo que puede ampliarse para su uso en implementaciones. El lado de lectura admite múltiples flujos diferentes ejecutándose con un único lado de lectura.

La clave de la configuración del lado de lectura es la clase abstracta 'MongoReadModelEntity'. Proporciona:

  • persistenceId - el id de persistencia (el IPF ID p. ej., Payoutflow|ABC)

  • originatingId - el id de origen del flujo (p. ej., UPRID)

  • originatingMessageType - el tipo de mensaje de origen (p. ej., ExecutePaymentRequest)

  • firstEventTime - la hora en la que se registró el primer evento en la transacción

  • lastProcessedEventTime - la hora en la que se registró el evento más reciente en la transacción

  • lastEventName - el nombre del evento más reciente

  • initiatingTimestamp - cuándo se inició el flujo

  • alternativeIds - una lista de ids alternativos por los que pueda conocerse la transacción

  • eventSummaries - una lista de resúmenes de eventos para todos los eventos de la transacción

  • payload - el payload de la transacción, según el API (por ejemplo, podría ser CreditTransferPayload, ReturnsPayload, etc.)

La implementación de esta clase es específica de la aplicación ya que depende de ser poblada por datos recibidos en eventos personalizados. Por esta razón, es necesario que la aplicación proporcione la implementación concreta. Para ello, deberán implementarse los siguientes métodos:

    protected abstract Supplier<T> payloadCreator();

    protected abstract BiFunction<Event, T, T> payloadUpdater();
  • payloadCreator - se requiere para proporcionar una nueva instancia del tipo de payload.

  • payloadUpdater - se requiere para determinar cómo el evento dado debe actualizar el payload actual.

  • originatingMessageTypeSupplier - se requiere para especificar el nombre (del registro de mensajes) del mensaje iniciador del flujo.

Además de los 3 métodos anteriores, hay varios métodos que tienen implementaciones por defecto que pueden sobrescribirse:

    protected Set<String> getAlternativeIdsFrom(Event event) {
        return Collections.emptySet();
    }
  • getAlternativeIdsFrom - por defecto devuelve una colección vacía; este método debe extraer cualquier id que deba usarse para la búsqueda.

  • getInitiatingTimestampFrom - por defecto utiliza la hora createdAt del primer evento recibido, pero puede sobrescribirse para usar los datos de cualquier evento.

  • getOriginatingIdFrom - por defecto utiliza el commandId del primer evento recibido, pero puede sobrescribirse para usar los datos de cualquier evento.

Una vez creada la implementación concreta de MongoReadModelEntity, debe registrarse creando una factoría que determine qué implementación debe usarse en función del IPF ID recibido.

public interface ReadModelEntityFactory {
    ReadModelEntity create(String persistenceId);
}

com.iconsolutions.ipf.platform.read.transaction Esto debe registrarse como un bean de Spring.

Ejemplo

Lo siguiente muestra un ejemplo de implementación de MongoReadModelEntity.

@Data
@AllArgsConstructor
public class TestCreditTransferTransactionReadModel extends MongoReadModelEntity<CreditTransferPayload> {


    @Override
    protected Supplier<CreditTransferPayload> payloadCreator() {
        return () -> CreditTransferPayload.builder().build();
    }

    @Override
    protected BiFunction<Event, CreditTransferPayload, CreditTransferPayload> payloadUpdater() {
        return (evt, returnPayload) -> {
            if (evt instanceof TestFIToFICustomerCreditTransferEvent) {
                returnPayload.setCreditTransfer(((TestFIToFICustomerCreditTransferEvent) evt).getCreditTransfer());
            }
            return returnPayload;
        };
    }

}

Para registrarlo, creamos la factoría:

@Slf4j
public class ReadModelEntityTestFactory implements ReadModelEntityFactory {

    @Override
    public ReadModelEntity create(String persistenceId) {
        log.debug("PersistenceId found on read side: {}", persistenceId);
        return new ReadSideFlowTestModel();
    }
}

Indexación

El ipf-read-starter tiene una configuración por defecto para crear automáticamente índices de MongoDB en la inicialización.

La creación de índices por defecto puede deshabilitarse con:

ipf.read-starter.mongodb.create-indexes=false

Los índices pueden deshabilitarse globalmente con:

ipf.mongodb.create-indexes=false

Para deshabilitar la indexación globalmente pero mantenerla para la transaction cache, aplica lo siguiente, respetando el orden:

ipf.mongodb.create-indexes=false
ipf.read-starter.mongodb.create-indexes=true

Commit Quorum

El commit quorum puede controlarse de forma similar con:

ipf.read-starter.mongodb.commit-quorum=1

O sobrescribirse globalmente con:

ipf.mongodb.commit-quorum=1