Lo que pasó, pasó
Hecho relevante
Suceso acontecido dentro
de nuestro sistema, que ha producido una mutación del estado de nuestra aplicación.
Negocio
Los eventos hablan el lenguaje de negocio y se originan en el dominio (casos de uso).
Inmutables
Al ser hechos ya ocurridos, éstos no se pueden a modificar.
SOLID
- Reduce el acoplamiento.
- Aumenta la mantenibilidad y extensión.
Resiliencia
Mayor robustez ante los fallos y mejor capacidad para reponernos de ellos.
Escalabilidad
Capacidad para distribuir la carga entre diferentes instancias de manera asíncrona.
Trazabilidad
Mejora la visualización de los casos de uso y sus efectos colaterales.
1. Diferentes verticales de negocio relacionadas.
2. Falta de independencia entre los equipos
3. Falta de auditoría en los flujos
Intercambiador de mensajes basado en diferentes estrategias de enrutado
Multicast
Regex
P2P
Es el destino de nuestros eventos.
Se suscriben mediante una binding key.
export const domainEvents = {
vehicle: {
activated: 'bipi.event.vehicle.activated',
deactivated: 'bipi.event.vehicle.deactivated',
},
}
# PRESENTING CODE
<context>.event.<module>.<event_name>
El nombre de los eventos siempre en pasado
Eventos
@registerEventSubscriber()
export class VehicleNotifyOnVehicleDeactivated extends EventSubscriber<VehicleTypes.Vehicle> {
constructor () {
super({
route: domainEvents.vehicle.deactivated,
queue: 'notify_slack_on_vehicle_deactivated',
})
}
protected async _handle (event: DomainEventDefinition<VehicleTypes.Vehicle>): Promise<void> {
const updatedVehicle = event.payload
Slacker.vehicleActivationStatusChanged(updatedVehicle, updatedVehicle.city, event.author).catch(err => {
Utils.captureException(err)
})
}
}
El nombre de las colas/consumers siempre en presente
Convención de nombres en