Utilice el Debulker Biblioteca del Cliente

Esta guía explica cómo utilizar el Debulker Biblioteca del Cliente para recibir archivos notifications in an IPF application.

Propósito

Si utiliza debulking en combinación con IPF, usted querrá ser notificado de la llegada (y completado debulking) de un bulk archivo. Esta Biblioteca de Cliente combina los siguientes componentes en una única dependencia:

  • Elección de transporte (Kafka)

  • Elección de component store tipo (MongoDB)

  • Elección del backend de gestión de archivos (Local, S3)

Pasos

Aquí está cómo comenzar a realizar la llamada a la Debulker Biblioteca del Cliente

Paso 1: Agregue la dependencia

La dependencia que utiliza depende de los enlaces de transporte que desea utilizar. Actualmente, solo Kafka es compatible con Debulker.

Esta dependencia está disponible como parte de la ipf-release-core-bom. Si está utilizando el IPF BOM, usted debe no es necesario especificar ninguna versión; usted recibirá el Debulker Versión de la biblioteca del cliente que ha sido validada con ese BOM. liberación.
Tipo de base de datos Tipo de transporte Dependencia

MongoDB

Kafka

<dependency>
    <groupId>com.iconsolutions.ipf.debulk</groupId>
    <artifactId>ipf-debulker-client-starter-mongo-kafka</artifactId>
</dependency>

Paso 2: Crear un Debulker Implementación de la Biblioteca del Cliente

Para que el Spring Boot AutoConfigurar para ipf-debulker-client-starter-mongo-kafka realizar todo el cableado relevante, el Contexto de Spring debe tener una implementación de com.iconsolutions.ipf.debulk.client. DebulkInitiationClientAdapter antes de que se habilite cualquier cosa.

Esta implementación debe ser una Spring bean también. Por lo tanto, la implementación más sencilla para activar el Debulker La biblioteca del cliente sería:

import com.iconsolutions.ipf.debulk.client. DebulkInitiationClientAdapter;
import org.springframework.stereotype. Component;

@Component (1)
public class MyDebulkInitiationClientAdapter implements DebulkInitiationClientAdapter { (2)

}
1 Definiéndolo como un Spring bean
2 Implementando la interfaz

Tenga en cuenta que no es necesario implementar el método de la interfaz para que la aplicación esté en funcionamiento. El valor predeterminado La implementación generará una excepción si de alguna manera recibe un mensaje y no ha implementado eso. interfaz. Si observamos la implementación predeterminada de handle:

default CompletionStage<Void> handle(ReceivingContext receivingContext, InitiateComponentProcessingCommand initiateComponentProcessingCommand) {
    throw new IconRuntimeException("Please implement the DebulkInitiationClientAdapter's handle method");
}

La implementación depende de lo que usted desee hacer con el mensaje, pero esto típicamente implicaría llamar a un IPF flow usando el XxxDomain métodos estáticos, tales como:

@Override
public CompletionStage<Void> handle(ReceivingContext receivingContext,
                                    InitiateComponentProcessingCommand payload) {
    var bulkId = BulkId.builder()
            .value(payload.getBulkId())
            .build();

    return componentStore.findAllByBulkIdAndMarkerFlux(bulkId, "Document")(1)
            .flatMap(bulk -> {
                var bulkCmd = new InitiateBulkFlowInput. Builder(bulk.getBulkId().getValue())
                        .withBulkId(payload.getBulkId())
                        .withComponentId(bulkId.getValue())
                        .withPaymentJourneyType("BULK")
                        .withProcessingContext(ProcessingContext.builder()
                                .unitOfWorkId(bulk.getId().getValue())
                                .clientRequestId(bulk.getBulkId().getValue())
                                .processingEntity("BANK_ENTITY_1")
                                .build())
                        .withGroupHeader(xmlMapper.fromXML(bulk.getContent(), Document.class).getCstmrCdtTrfInitn().getGrpHdr())(2)
                        .build();
                return Mono.fromCompletionStage(BulkDomain.initiation().handle(bulkCmd)); (3)
            })
            .collectList()
            .toFuture()
            .thenAccept(dones -> log.info("Started bulk: {}, {}", payload, dones));
}
1 A component store debe estar conectado como una dependencia a su implementación para recuperar el componente relevante de la tienda
2 Usando un inyectado XMLMapper para hacer un pain. 001 Document objeto a pasar al flujo
3 Creando una nueva instancia de BulkFlow