Profesní
Camunda Sink
Přehled
Camunda Sink propojoval event-driven business systémy s Camunda workflow. Zpracovával nakonfigurované události z firemní messaging platformy, převáděl je na integrační vzory specifické pro Camundu a řešil korelaci, retries, timeouty, tenant pravidla a reprocessing selhaných událostí. Výrazně jsem přispíval k architektuře a dalšímu rozvoji služby, včetně restrukturalizace projektů, dynamické konfigurace, registrace handlerů, multi-tenant chování, back-office nástrojů, asynchronního global-message processingu, zvýšení spolehlivosti a modernizace platformy.
Moje role
- Restrukturalizoval jsem službu do samostatných API, application, consumer, data a worker projektů a přidal Web API pro provozní konfiguraci.
- Implementoval jsem konfiguraci eventů uloženou v Azure Blob Storage s automatickým pollingem a reloadem při změně, což umožnilo upravovat event routing bez redeploymentu služby.
- Vytvořil jsem dynamickou registraci event handlerů a handler factory schopnou směrovat nakonfigurované event typy na correlation-message, signal nebo global-message processing.
- Rozšířil jsem Camunda integraci o asynchronní global-message processing, který aktualizoval proměnné napříč přihlášenými process instances a sledoval dokončení Camunda batch operací.
- Implementoval jsem tenant-aware zpracování eventů a konfigurovatelné potlačení zpracování pro vybrané tenanty, včetně API, back-office a audit logiky.
- Zvýšil jsem spolehlivost pomocí rozdílných Polly retry policies, timeout handlingu, circuit-breaker chování a bezpečnějšího ukládání a reprocessingu selhaných událostí.
- Vytvořil jsem Blazor back-office aplikaci a generovaného API klienta pro prohlížení a správu konfigurace zpracovávaných eventů.
- Implementoval jsem maintenance službu pro čištění expirovaných záznamů v Dead Events Storage a souvisejících blobů, včetně integračních testů nad Azurite a podpory CI/CD.
- Migroval jsem multi-project službu a související deployment tooling na .NET 7.
Architektura a technologie
- .NET worker services zpracovávající business eventy a commandy přes Ori.Messaging nad Azure Service Bus
- ASP.NET Core Web API pro prohlížení a úpravu konfigurace zpracovávaných eventů
- Dynamická event handler factory podporující Camunda correlation messages, signals a global variable updates
- Integrace přes Camunda OpenAPI klienta pro message correlation, signal delivery a asynchronní batch aktualizace process variables
- Runtime konfigurace uložená v Azure Blob Storage s detekcí změn pomocí ETag a propagací změn přes IOptionsMonitor
- Azure Table Storage, Blob Storage a Queue Storage pro ukládání a reprocessing selhaných eventů
- Polly retry a circuit-breaker policies s chováním přizpůsobeným jednotlivým integračním scénářům
- Server-side Blazor back-office UI s generovaným API klientem
- Application Insights telemetry, audit logging, Docker a Azure DevOps CI/CD
Technické výzvy
- Směrovat velké množství event typů do různých Camunda integračních vzorů a přitom zachovat chování konfigurovatelné bez velkého množství event-specific infrastruktury.
- Aplikovat změny konfigurace za běhu bez redeploymentu služby a bez ponechání consumerů registrovaných se zastaralými definicemi handlerů.
- Zpracovat Camunda operace s velmi rozdílnými charakteristikami – od synchronních correlation messages až po dlouhotrvající signals a asynchronní batch aktualizace.
- Vyhnout se nebezpečným retries v situacích, kdy Camunda mohla pokračovat ve zpracování i po timeoutu a opakovaný request by mohl způsobit duplicitní side effects.
- Podporovat multi-tenant zpracování eventů a zároveň umožnit dynamicky potlačit zpracování pro vybrané tenanty na úrovni konfigurace.
- Uchovat data o selhaných eventech pro analýzu a reprocessing a zároveň bezpečně řídit životní cyklus metadat a souvisejících blob payloadů.
Rozhodnutí a kompromisy
- Modelovat zpracování eventů pomocí konfigurovatelných handler typů namísto samostatných hardcoded pipeline pro každý event. Handler factory na základě event typu a konfigurace zvolila correlation-message, signal nebo global-message processing.
- Uložit konfiguraci zpracovávaných eventů do Azure Blob Storage a sledovat změny pomocí ETag. To umožnilo provozní změny routingu bez rebuildování nebo redeploymentu služby.
- Při změně konfigurace restartovat a znovu registrovat event consumery namísto pokusu měnit aktivní registrace handlerů za běhu. Runtime chování tak zůstalo synchronizované s aktuální konfigurací.
- Zpracovávat dlouhotrvající Camunda signals a global-message operace odlišně od standardních correlation messages. Některé timeout scénáře byly záměrně přesunuty do Dead Events Storage namísto automatického retry, aby se snížilo riziko duplicitního zpracování na straně Camundy.
- Spouštět global-message delivery asynchronně a sledovat dokončení Camunda batch operací, protože aktualizace více přihlášených process instances mohla přesáhnout běžnou dobu zpracování message handleru.
- Oddělit cleanup selhaných eventů do samostatného maintenance procesu a mazat blob payloady až po úspěšném odstranění odpovídajících metadat ze storage, čímž se snížilo riziko nekonzistentního cleanupu.
Výsledky a přínos
- Umožnil konfiguračně řízené směrování business eventů do několika různých Camunda integračních vzorů.
- Umožnil měnit konfiguraci zpracovávaných eventů za běhu prostřednictvím Blob Storage-backed konfigurace a dynamické re-registrace consumerů.
- Rozšířil integraci nad rámec přímé message correlation o tenant-aware signals a asynchronní aktualizace process variables.
- Zvýšil produkční spolehlivost pomocí retry, timeout a failed-event handlingu přizpůsobeného různým typům Camunda operací.
- Poskytl interní provozní nástroje pro prohlížení a správu event konfigurace prostřednictvím Web API a Blazor back office.
- Doplnil lifecycle management pro failed-event storage prostřednictvím samostatné maintenance služby s integračními testy.
- Modernizoval architekturu a runtime služby prostřednictvím restrukturalizace projektů a migrace na .NET 7.