This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
Alpine.js
ASP.NET
HTMX
Workflow
Bouwen van een workflow systeem met HTMX en ASP.NET Core - Deel 1: Inleiding
Wednesday, 15 January 2025
Inleiding
Werkstroomsystemen zijn overal in moderne toepassingen - van eenvoudige goedkeuringsprocessen tot complexe multi-stap automatiseringen.
Hoewel er uitstekende commerciële oplossingen zijn zoals Temporal, Airflow en n8n, heb je soms iets nodig dat op jouw specifieke behoeften is afgestemd.
In deze serie, zal ik u begeleiden door het bouwen van een complete workflow systeem vanaf nul met behulp van ASP.NET Core, HTMX, Alpine.js, en Hangfire.
Aan het einde van deze serie heb je een volledig functioneel workflow systeem met:
Een visuele node-gebaseerde editor voor het bouwen van workflows
JSON-gedefinieerde workflowknooppunten met ingangen, outputs en voorwaarden
Een aangepaste workflow uitvoering engine
Achtergrondtaak verwerken met Hangfire voor het peilen van externe API's
Beheer en persistentie van de staat
Een dashboard voor het monitoren van de uitvoering van de workflow
Waarom uw eigen workflow systeem bouwen?
Voordat we naar binnen duiken, laten we ons richten op de olifant in de kamer: waarom geen bestaande oplossing gebruiken?
Wanneer moet u uw eigen bouwen:
Je hebt diepe integratie nodig met je bestaande toepassing
Je hebt specifieke bedrijfslogica die niet past in generieke workflow tools
U wilt volledige controle over het uitvoeringsmodel en schaalvergroting
U moet externe afhankelijkheden minimaliseren
U wilt leren hoe workflow systemen werken onder de motorkap
Wanneer bestaande hulpmiddelen moeten worden gebruikt:
Je hebt onmiddellijk een bewezen, door de strijd geteste oplossing nodig.
U hebt functies zoals gedistribueerde uitvoering over vele machines nodig
U heeft geen tijd om aangepaste infrastructuur te bouwen en te onderhouden
Voor deze serie kiezen we ervoor om zelf te bouwen omdat het ons volledige flexibiliteit geeft en een uitstekende leermogelijkheid is.
Wat we aan het bouwen zijn
Ons workflowsysteem ondersteunt verschillende belangrijke concepten:
**1.**Knooppunten
**Knooppunten zijn de bouwstenen van workflows.**Elke knooppunt vertegenwoordigt een discrete actie of beslissingspunt.
**Bijvoorbeeld:**HTTP-verzoekknooppunt
: Maakt API oproepen naar externe dienstenVoorwaardeknoop
: Evalueert expressies en branches uitvoeringKnooppunt transformeren
: Start een workflow op basis van evenementen of schema's
Werkstromen
Een workflow is een gerichte grafiek van verbonden knooppunten.
Gegevens stromen van de ene knooppunt naar de andere door verbindingen, met elke knooppuntverwerking en het transformeren van de gegevens naar behoefte.
3.
Uitvoeringsmotor
De motor die de workflow definitie interpreteert en knooppunten in de juiste volgorde uitvoert:
Sequentiële uitvoering
Parallelle uitvoering (wanneer knooppunten niet van elkaar afhankelijk zijn)
Voorwaardelijke vertakken
Fout bij het hanteren en opnieuw uitvoeren
Persistentie van de staat
Visuele editor
Een web-based UI waar gebruikers kunnen:
Knooppunten op een canvas slepen en neerzetten
Knooppunten verbinden door tussen de randen te tekenen
Node-eigenschappen configureren
Testworkflows
Uitvoergeschiedenis tonen
**5.**Achtergrondverwerking
**Met behulp van Hangfire, zullen we implementeren:**Geplande workflow-uitvoering
API-peilingen voor externe gegevensLogica opnieuw proberen voor mislukte uitvoeringen
Dashboard voor het monitoren van takenTechnologie Stack
**Dit is wat we gaan gebruiken:**Backend
ASP.NET Kern 9.0
: Ons webkaderKern van het entiteitskader
: Voor persistentie van gegevensPostgreSQL
: Database voor het opslaan van workflow definities en uitvoeringstoestandHangvuur
: AchtergrondtaakverwerkingSystem.Text.Json
: Voor workflow JSON serialisatie
FrontendHTMX 2.0
: Voor dynamische, servergestuurde UI-updates zonder het schrijven van JavaScriptAlpine.jsunit synonyms for matching user input
: Lichtgewicht JavaScript-raamwerk voor interactieve componentenTailwindCSS + DaisyUI