Geen wederzijdse exclusiviteit
Fat en thin events zijn niet namelijk wederzijds exclusief. Je kan ze prima combineren in één architectuur of zelfs in één patroon. Een goed voorbeeld is het Claim Check patroon (zie illustratie). Dit patroon is van toepassing in een architectuur waarin berichten met grote data-objecten (>1mb) tussen systemen verzonden worden via events. De data worden in een derde systeem (bijvoorbeeld een database of object store) opgeslagen en een referentie naar dit systeem wordt in het event zelf gepubliceerd. Dit om te voorkomen dat de events zo groot worden dat ze tot bijvoorbeeld capaciteitsproblemen in het eventplatform leiden.
Je kan een patroon implementeren waarin berichten die groter zijn dan 1 mb automatisch van een claim check worden voorzien en via thin events worden verzonden. Kleinere berichten worden dan wel nog als fat events verzonden. Een goed voorbeeld van hoe fat en thin events in één architectuur ingezet kunnen worden en dus niet wederzijds exclusief zijn.
Fat events kunnen uiteraard ook aangevuld worden met de inhoud van thin events. Een verwijzing naar het systeem dat de data bevat kan dan als aanvulling in het event worden opgenomen. Een dergelijk patroon zet je wel aan het denken, omdat events juist het ontkoppelen van systemen bevorderen. Dat voordeel doe je teniet door de consumers afhankelijk te maken van de beschikbaarheid van andere systemen/producers.
Conclusie: het hangt ervan af
Het is een wat flauwe conclusie, maar of je het beste voor thin events of fat events kan kiezen hangt van je doelstellingen en architectuur af. Thin events leiden er in een architectuur doorgaans wel toe dat je het voordeel van ontkoppeling enigszins tenietdoet, maar er zijn goede argumenten voor het gebruik ervan. Zo hoeft de inhoud van een thin event niet persé naar de producer van hetzelfde event te verwijzen (ook al is dat meestal wel het geval en creëer je ongeacht wel een directe koppeling met een ander systeem).
Een goed voorbeeld is het Claim Check patroon. Als de data in je events groot is (>1mb) of je de inhoud (sterker) wil afschermen, kan je in dit patroon prima thin events inzetten. Je zal in zo’n architectuur wel o.a. stil moeten staan bij het moment waarop zo’n event verzonden wordt i.v.m. latency of de verwerkingstijd van de data store waar het event naar verwijst.
Kortom, het discussiëren over de inhoud van events hoort bij het overwogen inzetten van events in iedere architectuur.