zpět na Všechny projekty

Profesní

Camunda Source

Přehled

Camunda Source tvořil Camunda-to-messaging část integrační vrstvy workflow. Polloval Camunda external tasks, podle konfigurace určoval odpovídající event nebo command kontrakt, převáděl process variables na silně typované zprávy, publikoval je přes Event Hub a následně dokončoval odpovídající Camunda tasky. Moje hlavní příspěvky se soustředily na rozšíření vytváření kontraktů za hranici primitivních hodnot, podporu rekonstrukce vnořených objektů z Camunda variables a přidání warehouse a order command flow do integrace.

Moje role

  • Implementoval jsem podporu rekonstrukce komplexních a vnořených vlastností messaging kontraktů z Camunda task variables pomocí JSON deserializace, reflection a rekurzivní konverze.
  • Rozšířil jsem worker tak, aby Camunda tasky mohly vytvářet kontrakty, jejichž statické Create metody vyžadovaly komplexní object graph místo pouze primitivních parametrů.
  • Přidal jsem Camunda-to-messaging podporu pro AuthorizeOrderForPickingCommand včetně topic konfigurace a integrace messaging kontraktu.
  • Přidal jsem podporu publikování GenerateOrderSummaryCommand z Camunda external tasks.
  • Zlepšil jsem audit logging pro non-tenant eventy tím, že dostaly konzistentní global tenant context.
  • Přispíval jsem také k dependency a platform maintenance, včetně upgradů messaging balíčků, odstranění AutoMapperu a cleanupu deployment konfigurace.

Architektura a technologie

  • .NET hosted worker pollující Camunda external tasks přes Camunda REST API
  • Konfiguračně řízené mapování mezi Camunda topic names a Oriflame event nebo command kontrakty
  • Reflection-based vytváření kontraktů pomocí statických Create metod
  • Rekurzivní konverze primitivních i komplexních Camunda variables na silně typované parametry kontraktů
  • Publikování přes Event Hub prostřednictvím firemní Ori.Messaging infrastruktury
  • Polly retry handling kolem dokončování Camunda tasků a reportování selhání
  • Omezené souběžné zpracování načtených external tasks
  • Application Insights telemetry, audit logging, Docker a Azure DevOps CI/CD

Technické výzvy

  • Převést volně strukturované Camunda task variables na silně typované messaging kontrakty, jejichž pravidla konstrukce byla definována statickými Create metodami.
  • Podporovat vnořené object graphy a komplexní vlastnosti kontraktů a zároveň zachovat stejný mapping model používaný pro primitivní parametry.
  • Koordinovat publikování zprávy a dokončení Camunda tasku, přestože tyto dvě operace netvoří jednu společnou transakci.
  • Zabránit neomezenému paralelnímu zpracování při kontinuálním pollování Camundy pro nové external tasks.
  • Zachovat traceability a correlation mezi Camunda process instances a zprávami publikovanými do downstream systémů.

Rozhodnutí a kompromisy

  • Resolvit messaging kontrakty z nakonfigurovaných Camunda topic names místo hardcodování vytváření zpráv do jednotlivých worker flow. Worker tak zůstal generický a nové command nebo event mapování bylo možné přidávat hlavně přes konfiguraci a contract packages.
  • Vytvářet komplexní hodnoty kontraktů rekurzivní inspekcí statických Create metod místo obcházení doménového construction modelu přímým nastavováním properties. Vygenerované zprávy tak zůstaly v souladu s konvencemi sdílených messaging kontraktů.
  • Deserializovat komplexní Camunda variables z JSON a mapovat jejich členy case-insensitively na vnořené parametry kontraktů. Integrace tak podporovala komplexní process variables bez nutnosti vytvářet custom converter pro každý typ kontraktu.
  • Publikovat zprávu před dokončením Camunda external tasku, aby při selhání konverze nebo publikování zůstal task dostupný pro retry. Protože publishing a completion nejsou atomické, zůstává v případě opakovaného selhání completion po úspěšném publish možná duplicitní publikace.
  • Omezit souběžné zpracování pomocí nakonfigurované kapacity tasků místo načítání neomezeného množství Camunda tasků.

Výsledky a přínos

  • Odstranil zásadní omezení integrace tím, že Camunda tasky mohly vytvářet eventy a commandy obsahující vnořené komplexní properties.
  • Umožnil warehouse a order workflow publikovat silně typované commandy z Camundy do sdílené messaging platformy.
  • Zachoval generický, konfiguračně řízený external-task processing model místo zavádění command-specific worker implementací.
  • Zlepšil konzistenci auditu pro global a non-tenant messages.
  • Přispěl k širší asynchronní integrační vrstvě propojující Camunda workflow execution s downstream business službami.