De uitdaging
Neuhaus had een betrouwbare datastroom nodig tussen commerce- en operationele systemen die niet met één contract of leveringsmechanisme werkten. Orders kwamen uit Salesforce Commerce Cloud, Dynamics 365 en een ander retailkanaal, terwijl product- en prijsinformatie afzonderlijke XML-contracten gebruikte. Die bronnen hadden verschillende identifiers, structuren, updatepatronen en foutscenario’s. Afnemers hadden daarentegen consistente data nodig voor opslag, rapportering en verdere verwerking.
Het platform moest die verschillen vertalen zonder bedrijfsdetails te verliezen, updates veilig verwerken en begrijpelijk blijven wanneer nieuwe databronnen en bestemmingen werden toegevoegd.
Een eventgedreven integratielaag
David ontwierp en bouwde een reeks .NET Azure Functions rond Azure Service Bus en events bij nieuwe blobs. Bronspecifieke functies lezen JSON- of XML-payloads, valideren ze en mappen ze naar gedeelde contracten voor orders, producten en prijzen. Een geplande flow voor Salesforce Commerce Cloud haalt gewijzigde orders op en voert ze in dezelfde genormaliseerde orderpipeline in.
Elke vertaler houdt de kennis van zijn bronsysteem aan de rand. Zodra een bericht genormaliseerd is, hoeven downstreamcomponenten MATMAS-product-XML, prijscontracten of de afzonderlijke orderformaten niet meer te begrijpen. Zo krijgt het platform een stabiele interne taal en kunnen externe integraties onafhankelijk evolueren.
Betrouwbare verwerking en herstel
De verwerkingsstatus wordt bijgehouden zodat dubbele of verouderde berichten geen invloed hebben op de dataset. Berichtidentifiers en timestamps uit de bron ondersteunen idempotent gedrag. Mislukte transformaties worden afzonderlijk gelogd en infrastructuurfouten kunnen berichten naar dead-letterqueues verplaatsen. Geplande herstelfuncties kunnen die berichten opnieuw aanbieden nadat het onderliggende probleem is opgelost.
Beheerde Azure-identiteiten geven toegang tot Service Bus en opslagdiensten. Cancellation tokens, SQL-toegang met retries en centrale exceptionmiddleware helpen de functies voorspelbaar te reageren tijdens stops en tijdelijke infrastructuurproblemen.
Van ruwe events naar bruikbare data
Een afzonderlijke ingestieapplicatie verwerkt de genormaliseerde berichten. Ze bewaart bronartefacten in Azure Storage en bouwt gestructureerde bestemmingen voor analytisch en operationeel gebruik. Orders worden opgesplitst in headers, adressen, lijnen, kortingen en betalingen. Producten worden uitgebreid naar kanalen, beschrijvingen, samenstellingen en interne producten, terwijl prijzen eigen detail- en historiestructuren krijgen.
De data wordt naar Azure SQL geschreven en omgezet naar Parquet-datasets in bronze- en silverlagen van het Data Lake. Verwerkingshistoriek en foutregistraties maken de beweging door de pipeline zichtbaar zonder de vertaalfuncties aan één bestemming te koppelen.
Configureerbare databasesynchronisatie
Het platform werd later uitgebreid met een ASP.NET Core- en Hangfire-service voor configureerbare SQL Server-synchronisatie. Elke actieve tabel heeft een eigen planning en verbindingsconfiguratie. Jobs kunnen volledige vernieuwingen uitvoeren of incrementeel synchroniseren met datum/tijd- of row-versionwatermerken.
De service inspecteert schema’s, valideert ondersteunde SQL-types, laadt gewijzigde rijen in tijdelijke tabellen en voegt ze samen met de bestemming. Afzonderlijke queues voor onderhoud en synchronisatie, concurrencycontrole per tabel, gestructureerde SQL-logging en een Hangfire-dashboard maken terugkerend werk zichtbaar en beheersbaar.
Resultaat
Neuhaus kreeg een herbruikbare dataruggengraat in plaats van een verzameling point-to-pointscripts. Heterogene commerce-events komen binnen via bronspecifieke adapters, worden gedeelde contracten en stromen met expliciete verwerkingsstatus en herstelpaden naar Data Lake- en SQL-bestemmingen. Geautomatiseerde tests voor contracten, planning, watermerken en SQL-generatie beschermen de belangrijkste transformaties terwijl het platform verder groeit.
