Κατασκευή ενός συστήματος ροής εργασίας με HTMX και ASP.NET Core - Μέρος 1: Εισαγωγή
Εισαγωγή
Τα συστήματα ροής εργασίας βρίσκονται παντού σε σύγχρονες εφαρμογές - από απλές διαδικασίες έγκρισης έως περίπλοκους πολυβόλους αυτοματισμούς.
Ενώ υπάρχουν εξαιρετικές εμπορικές λύσεις όπως Temporal, Airflow, και n8n, μερικές φορές χρειάζεστε κάτι προσαρμοσμένο στις συγκεκριμένες ανάγκες σας.
- Σε αυτή τη σειρά, θα σας περπατήσω μέσα από την οικοδόμηση ενός πλήρους συστήματος ροής εργασίας από το μηδέν χρησιμοποιώντας ASP.NET Core, HTMX, Alpine.js, και Hangfire.
- Μέχρι το τέλος αυτής της σειράς, θα έχετε ένα πλήρως λειτουργικό σύστημα ροής εργασίας με:
- Επεξεργαστής με οπτική βάση κόμβους για την κατασκευή ροών εργασίας
- JSON-καθορισμένοι κόμβοι ροής εργασίας με εισόδους, εξόδους, και συνθήκες
- Ένας προσαρμοσμένος κινητήρας εκτέλεσης ροής εργασιών
- Ιστορικό επεξεργασίας εργασίας με Hangfire για τη δημοσκόπηση απομακρυσμένων APIs
Κρατική διαχείριση και επιμονή
Ταμπλό για την παρακολούθηση της εκτέλεσης ροής εργασιών
Γιατί να Φτιάξετε το δικό σας Σύστημα Ροής Εργασίας;
- Πριν βουτήξουμε μέσα, ας μιλήσουμε στον ελέφαντα στο δωμάτιο: γιατί να μην χρησιμοποιήσουμε μια υπάρχουσα λύση;
- Πότε να φτιάξετε το δικό σας:
- Χρειάζεστε βαθιά ενσωμάτωση με την υπάρχουσα εφαρμογή σας
- Έχετε συγκεκριμένη επιχειρηματική λογική που δεν ταιριάζει σε εργαλεία γενικής ροής εργασίας
- Θέλετε πλήρη έλεγχο του μοντέλου εκτέλεσης και κλιμάκωση
Πρέπει να ελαχιστοποιήσετε τις εξωτερικές εξαρτήσεις
- Θέλετε να μάθετε πώς λειτουργούν τα συστήματα ροής εργασίας κάτω από το καπό
- Πότε να χρησιμοποιήσετε τα υπάρχοντα εργαλεία:
- Χρειάζεσαι μια αποδεδειγμένη, δοκιμασμένη από μάχη λύση αμέσως.
Θέλετε χαρακτηριστικά όπως κατανεμημένη εκτέλεση σε πολλές μηχανές
Δεν έχεις χρόνο να χτίσεις και να διατηρήσεις την προσαρμοσμένη υποδομή.
Για αυτή τη σειρά, επιλέγουμε να χτίσουμε τη δική μας γιατί μας δίνει πλήρη ευελιξία και είναι μια εξαιρετική ευκαιρία μάθησης.
Τι φτιάχνουμε;
Το σύστημα ροής εργασίας μας θα υποστηρίξει διάφορες βασικές έννοιες:
- **1.**Κόμβοι
- **Οι κόμβοι είναι τα δομικά στοιχεία των ροών εργασίας.**Κάθε κόμβος αντιπροσωπεύει ένα διακριτό σημείο δράσης ή απόφασης.
- **Παραδείγματα:**Ο κόμβος αίτησης HTTP
- : Κάνει κλήσεις API σε εξωτερικές υπηρεσίεςΚόμβος κατάστασηςName
- : Αξιολογεί τις εκφράσεις και τους κλάδους εκτέλεσηςΜεταμορφώστε τον κόμβο
: Επεξεργασίες δεδομένων (χειρισμός JSON, φιλτράρισμα κ.λπ.)
Κόμβος καθυστέρησης
: Αναμονή για συγκεκριμένη διάρκεια
Κόμβος ενεργοποίησηςName
- : Ξεκινά μια ροή εργασίας με βάση γεγονότα ή προγράμματα
-
- Ροές εργασίας
- Μια ροή εργασίας είναι ένα κατευθυνόμενο γράφημα των συνδεδεμένων κόμβων.
- Τα δεδομένα ρέουν από τον ένα κόμβο στον άλλο μέσω συνδέσεων, με κάθε κόμβο επεξεργασίας και μετατρέποντας τα δεδομένα όπως απαιτείται.
3.
Κινητήρας εκτέλεσης
- Ο κινητήρας που ερμηνεύει τον ορισμό ροής εργασίας και εκτελεί κόμβους με τη σωστή σειρά, χειρισμού:
- Επακόλουθη εκτέλεση
- Παράλληλη εκτέλεση (όταν οι κόμβοι δεν εξαρτώνται ο ένας από τον άλλο)
- Διακλάδωση υπό όρους
- Χειρισμός λάθους και επαναλήψεις
Διαμονή του κράτους
- Visual Editor
- Ένα web-based UI όπου οι χρήστες μπορούν:
- Σύρετε και ρίξτε κόμβους σε έναν καμβά
- Συνδέστε κόμβους με τις άκρες σχεδίασης μεταξύ τους
Ρύθμιση ιδιοτήτων κόμβου
Ροές εργασίας δοκιμής
Προβολή ιστορικού εκτέλεσης
- **5.**Επεξεργασία ιστορικού
- **Χρησιμοποιώντας Hangfire, θα εφαρμόσουμε:**Εκτέλεση προγραμματισμένης ροής εργασίας
- API δημοσκοπήσεις για εξωτερικά δεδομέναΕπαναφορά λογικής για αποτυχημένες εκτελέσεις
- Ταχυδρόμος για την παρακολούθηση των θέσεων εργασίαςΣτοίβα τεχνολογίαςName
- **Άκου τι θα χρησιμοποιήσουμε:**Σύστημα υποστήριξης
ASP.NET Core 9.0
- : Το web framework μαςΚεντρικό πλαίσιο οντότητας
- : Για την επιμονή των δεδομένωνPostgreSQL
- : Βάση δεδομένων για την αποθήκευση ορισμών ροής εργασίας και κατάστασης εκτέλεσηςΦωτιά στην κρεμάλα
- : Επεξεργασία υποβάθρου εργασίαςΣύστημα.Κείμενο. Json
: Για serialization της ροής εργασίας JSON
- ΕμπρόσθιοHTMX 2. 0
- : Για δυναμικές, server-οδηγούμενες ενημερώσεις UI χωρίς γράψιμο JavaScriptAlpine.js
- : Ελαφρύ πλαίσιο JavaScript για διαδραστικά συστατικάWailwindCSS + DaisyUI
: Εξαρτήματα στυλ και UI
LeaderLine
Mostlylucid.Workflow/
├── Mostlylucid.Workflow.Engine/ # Core workflow execution engine
│ ├── Models/ # Node, Workflow, Connection models
│ ├── Execution/ # Workflow executor and runtime
│ └── Nodes/ # Built-in node implementations
├── Mostlylucid.Workflow.Shared/ # Shared models and DTOs
├── Mostlylucid.Workflow.DbContext/ # Entity Framework context
└── Mostlylucid/ # Main web app (existing)
├── Controllers/WorkflowController.cs
├── Services/WorkflowService.cs
└── Views/Workflow/ # Workflow UI views
: Για τη σχεδίαση συνδέσεων μεταξύ κόμβων (θα εξερευνήσουμε εναλλακτικές λύσεις)
Υποδομές ΝτόκερCity name (optional, probably does not need a translation)
{
"id": "node-1",
"type": "HttpRequest",
"name": "Fetch User Data",
"inputs": {
"url": "https://api.example.com/users/{{userId}}",
"method": "GET",
"headers": {
"Authorization": "Bearer {{apiToken}}"
}
},
"outputs": {
"response": "{{result.body}}",
"statusCode": "{{result.statusCode}}"
},
"conditions": {
"onSuccess": "next-node-id",
"onError": "error-handler-node-id"
}
}
: Για τη μεταφορά εμπορευματοκιβωτίων SeqCity name (optional, probably does not need a translation)
- : Για δομημένη υλοτομία
- Prometheus + Grafana
- : Για παρακολούθηση
Αρχιτεκτονική επισκόπηση Το σύστημά μας θα οργανωθεί σε διάφορα έργα:
- Βασικές αποφάσεις σχεδιασμού
-
- Ορισμοί κόμβων JSON-Based
- Οι κόμβοι θα ορίζονται σε JSON, καθιστώντας τους εύκολο να κατά σειρά, έκδοση, και να μοιραστούν:
2. Εκτέλεση με βάση το διάγραμμα
- Οι ροές εργασίας κατευθύνονται σε άκυκλα γραφήματα (DAGs).
- Ο κινητήρας εκτέλεσης:
- Εκτελέστε τοπολογική διαλογή για τον προσδιορισμό της εντολής εκτέλεσης
Εκτελέστε κόμβους παράλληλα όπου είναι δυνατόν
Χειρισμός υπό όρους διακλάδωσης με βάση εξόδους κόμβου
-
- Διαμονή στο Κράτος
- Κάθε εκτέλεση ροής εργασίας θα παρακολουθείται:
- Κατάσταση περίπτωσης ροής εργασίας (Running, Completed, Failed)
Αποτελέσματα εκτέλεσης κόμβου
- Η ενεργοποίηση δηλώνει για τις προγραμματισμένες ροές εργασίας
- Ιστορικό εκτέλεσης και αρχεία καταγραφής
-
- Εκτεταμένη δυνατότητα
- Το σύστημα κόμβου θα βασίζεται σε plugin:
Ενσωματωμένοι κόμβοι για κοινές λειτουργίες
- Προσαρμοσμένοι τύποι κόμβου μπορούν να καταχωρηθούν
- Επικύρωση κόμβου και επιβολή σχημάτων
- Τι έρχεται σε αυτή τη σειρά
- Μέρος 2: Αρχιτεκτονική και Κεντρικός Μηχανής Ροής Εργασίας
- Δημιουργία της δομής του έργου
Κατασκευάζοντας τα βασικά μοντέλα ροής εργασίας (Νόμος, Ροή Εργασίας, Σύνδεση)
- Εφαρμογή του κινητήρα εκτέλεσης γραφήματος
- Τοπολογική διαλογή και ανάλυση εξάρτησης
- Μέρος 3: Κατασκευή του Οπτικού Επεξεργαστή
- Δημιουργία του καμβά ροής εργασίας με HTMX και Alpine.js
- Σύρετε-και-σταγόνα θέση κόμβου
Σχέδιο οπτικής σύνδεσης
Πίνακας ρυθμίσεων κόμβου
- Ταξινόμηση της ροής εργασίας
- Μέρος 4: Ενσωμάτωση στην πυρκαϊά και διαχείριση του κράτους
- Ρύθμιση Hangfire για την επεξεργασία υποβάθρου
- Εφαρμογή κόμβων δημοσκοπήσεων API
- Διαχείριση του κράτους ενεργοποίησης
Επαναφορά λογικής και χειρισμού λάθους
Ενσωμάτωση ταμπλόName
Μέρος 5: Προχωρημένα χαρακτηριστικά και ανάπτυξη
Εφαρμογή συνηθισμένων κόμβων
Έκδοση ροής εργασίας
Στρατηγικές δοκιμών
Βελτιστοποίηση της απόδοσης