Event Carried State Transfer
Il messaggio trasporta il delta (o lo stato) necessario al consumer per aggiornare il proprio modello senza chiamate aggiuntive: UI più atomica, payload più grandi.
Approfondimento
Definizioni, contesto e collegamenti tra concetti — leggi prima del palcoscenico interattivo se parti da zero.
ECST: stato nel messaggio
Event-Carried State Transfer (ECST) significa che il messaggio contiene abbastanza stato (o un delta significativo) perché il consumer aggiorni il proprio modello senza chiamate aggiuntive. È vicino all’idea REST del trasferimento di stato nella risposta, applicata agli eventi.
Utile quando vuoi repliche locali, UI reattive offline-first, o quando il costo del fetch è alto rispetto al costo del payload. Più stato trasporti, più crescono dimensione messaggi, log e superficie di dati sensibili.
PII, conflitti e versionamento
Ogni campo nel bus può finire in log, mirror e backup: classifica PII, maschera, cifra e applica retention. Definisci una strategia per conflitti: se il consumer ha modificato localmente mentre arriva un ECST, serve una regola (last-write-wins, merge, CRDT, o ricarico forzato).
Versiona il tipo CloudEvent o un campo `schemaversion` nel payload quando rompi compatibilità: i consumer devono poter convivere con più versioni durante il rollout.
Palcoscenico
previous (bus)
{"qty":1,"price":12.5}current (bus)
{"qty":2,"price":11}Read model locale (UI)
{"qty":1,"price":12.5}Prima dell’evento lo snapshot locale coincide con `previous`.
Contratto e codice
Schema JSON basato su CloudEvents 1.0, poi snippet server e client.
{
"specversion": "1.0",
"source": "/orders-service",
"id": "550e8400-e29b-41d4-a716-446655440000",
"time": "2026-05-13T12:00:00.000Z",
"datacontenttype": "application/json",
"type": "com.example.profile.updated",
"data": {
"userId": "usr_42",
"previous": { "displayName": "Ada", "avatarUrl": "/a.png" },
"current": { "displayName": "Ada L.", "avatarUrl": "/b.png" }
}
}