¿Qué hace AxonFramework?
Explica y razona sobre los Límites de Consistencia Dinámicos (DCB) y cómo Axon Framework 5 y Axon Server los implementan. Úsalo cuando el usuario pregunte sobre "DCB", "límite de consistencia dinámico", "límite de consistencia", "matar el agregado", modelado de consistencia entre múltiples entidades, "EventCriteria", "@EventCriteriaBuilder", "@EventTag", "@EventSourcedEntity", "Tag", tags vs streams, "AppendCondition", "SourcingCondition", "ConsistencyMarker", concurrencia optimista en el almacén de eventos, cómo elegir.
Introducción
Los Límites de Consistencia Dinámicos (DCB) representan un avance significativo en el modelado de consistencia dentro de sistemas basados en eventos. Axon Framework 5 y Axon Server proporcionan un conjunto de herramientas y anotaciones para implementar DCB de manera sencilla y eficiente.
Conceptos Clave
Tags y Streams
- Tags: Etiquetas que se asignan a eventos para agruparlos según criterios de consistencia. Se definen mediante la anotación
@EventTag. - Streams: Flujos de eventos que pueden filtrarse por tags. Los streams permiten consultar eventos que cumplen con ciertos criterios de consistencia.
EventCriteria
EventCriteria es una interfaz que permite definir condiciones para seleccionar eventos. Se utiliza en conjunto con @EventCriteriaBuilder para construir consultas complejas.
AppendCondition y SourcingCondition
- AppendCondition: Define condiciones que deben cumplirse al agregar nuevos eventos, garantizando la consistencia en escritura.
- SourcingCondition: Define condiciones para la reconstrucción del estado a partir de eventos previos, asegurando la consistencia en lectura.
ConsistencyMarker
ConsistencyMarker es un marcador que indica el nivel de consistencia requerido para una operación. Puede ser utilizado para controlar la propagación de eventos y garantizar la coherencia.
Anotaciones Principales
| Anotación | Descripción |
|---|---|
@EventSourcedEntity | Marca una entidad como fuente de eventos. |
@EventCriteriaBuilder | Construye criterios para seleccionar eventos. |
@EventTag | Define una etiqueta para agrupar eventos. |
Cómo Implementar DCB
- Identificar los límites de consistencia: Determinar qué entidades deben mantenerse consistentes entre sí.
- Definir tags: Usar
@EventTagpara etiquetar eventos relevantes. - Configurar AppendCondition y SourcingCondition: Establecer condiciones que garanticen la consistencia.
- Utilizar EventCriteria: Filtrar eventos según los tags definidos.
- Optimizar con streams: Elegir entre tags y streams según las necesidades de rendimiento y consistencia.
Ejemplo Práctico
@EventSourcedEntity
@EventTag(name = "customer", value = "123")
public class Customer {
// ...
}
En este ejemplo, la entidad Customer está etiquetada con un tag que la asocia a un cliente específico. Esto permite que los eventos relacionados con este cliente se agrupen y se mantengan consistentes.
Consideraciones
- Elegir entre tags y streams: Los tags son más flexibles pero pueden tener mayor sobrecarga. Los streams son más eficientes para consultas específicas.
- Concurrencia optimista: Usar
ConsistencyMarkerpara manejar conflictos de concurrencia. - "Matar el agregado": Con DCB, ya no es necesario forzar la eliminación de agregados; los tags y condiciones dinámicas permiten una gestión más granular.
Recursos Adicionales
- Documentación oficial de Axon Framework 5
- Guía de Axon Server
- Ejemplos de código en GitHub