¿Cómo puedo mantener el orden causal de extremo a extremo de Domain Events en un Viaje de Pago?
Ser capaz de determinar el orden causal de events en un sistema informático distribuido es crucial al construir proyecciones del lado de lectura de un unit of work basado 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 lógica unit of work-debe ser ordenado en un orden causal, que ocurrió antes.
Cada generado Action in 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 una no secuencialidad.event orden.
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. |