¿Cómo puedo mantener el orden causal de extremo a extremo de Domain Events en un Viaje de Pago?
Determinar el orden causal de los eventos en un sistema informático distribuido es crucial al construir proyecciones del lado de lectura de una unidad de trabajo basada en el domain events de sus flujos constituyentes. El DSL proporciona esta funcionalidad lista para usar al intercambiar un EventId cada vez que los flujos se comunican entre sí como parte de un viaje de pago.
El EventId contiene el Marca de tiempo de Lamport del flujo en el que fue creado por primera vez (el flujo de llamada). Cuando el EventId se transfiere a otro flujo (el flujo llamado), este flujo continúa incrementando la marca de tiempo según sea necesario. Al pasar un EventId de un flujo a otro, habilitamos domain events-perteneciente a diferentes flujos dentro de una única unidad lógica de trabajo-debe ser ordenado en un orden causal, que ocurrió antes.
Cada generado Action en flo-lang proporciona acceso al actual EventId a través de su getCurrentEventId método, y cada Input. Builder proporciona un withCausedByEventId que puede ser utilizado para transmitir el EventId del flujo de colaboración:
@Override
public CompletionStage<Void> execute(SampleExternalDomainAction action) {
var externalDomainDto = convertToExternalDomain(action);
return AnotherDomain.appropriateDomain().handle(new AppropriateDomainResponseInput
.Builder(id, AppropriateDomainResponseCodes. OK)
.withCausedByEventId(action.getCurrentEventId())
.build());
}
Sin EventIds y sus marcas de tiempo de Lamport, las proyecciones se verían obligadas a utilizar marcas de tiempo del reloj del sistema en su lugar. Dado que diferentes nodos o procesos típicamente no están perfectamente sincronizados, es probable que ocurra un desfase de reloj, lo que resultaría en un orden de eventos no secuencial.
Como se mencionó anteriormente, el DSL proporciona esta funcionalidad lista para usar y no se requiere trabajo manual para garantizar el orden causal de extremo a extremo de domain events en un proceso de pago. |