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 |