The Daily Commit · Ressort-Ausgabe Titelseite PHP AI Dev EN DE FR ES

The Php Times

Lesestoff — Ökosystem

Saga Lara Flow: Dauerhafte Workflows und Saga-Rollbacks für Laravel Queues

LARAVEL NEWS, 7. August 2026 kuratiert von Sönke

Saga Lara Flow ist ein Laravel-Package, das langlaufende Geschäftsprozesse als einfache PHP-Methoden auf Basis von Queues abbildet – mit aufgezeichneten Schritten, Replay-Logik, kompensierenden Transaktionen, Signals, parallelen Blöcken und Kind-Workflows.

Saga Lara Flow, ein Laravel-Package von Andriy Karpishyn (discovery-ukraine), erlaubt es, langlaufende Geschäftsprozesse als eine einzige handle()-Methode zu schreiben – ohne Job-Chaining und ohne State Machine. Karte belasten, Lagerbestand reservieren, Versand buchen: alles als sequenzielle Codezeilen. Das Package protokolliert jeden abgeschlossenen Schritt in der Datenbank. Wenn ein Lauf auf einem Worker fortgesetzt wird, führt die Engine handle() erneut aus, doch Aufrufe über $this->action() liefern für bereits erledigte Schritte die gespeicherten Ergebnisse; sobald das Replay unausgeführten Code erreicht, läuft die normale Ausführung weiter. Wirft ein Schritt eine Exception, werden die Kompensationen früherer Schritte in umgekehrter Reihenfolge ausgelöst.

Zu den Kernfunktionen zählen Kompensationen via compensateWith() (Action-Klasse oder Closure), Signals via $this->signal() mit optionalen timeoutAfter()-Fristen und AwaitSignalTimeoutException, parallele Blöcke mit failFast()-Standardverhalten, Kind-Workflows mit ChildClosePolicy (z. B. Terminate) sowie sideEffect() zum Aufzeichnen nicht-deterministischer Werte wie UUIDs, damit Replays konsistent bleiben. Tag-basierte Abfragen (withTags(), $this->tag()) und Scopes wie running(), waiting() und failed() erlauben es, Läufe ohne gespeicherte IDs zu finden und etwa ein Signal an alle passenden Runs zu senden.

Workflows erweitern die Workflow-Klasse des Packages; Actions sind eigene, aus dem Container aufgelöste Klassen mit eigenen Queue-Einstellungen: $tries, $timeout und expiresAt(). Erschöpfte Retries erscheinen als ActionFailedException, eine überschrittene Frist als FlowExpiredException. Optionale Schritte nutzen continueOnFailure()/optionalAction() mit Fallback-Werten. Der $this->saga()-Builder fasst Schritte zu einer Rollback-Einheit zusammen, mit onCompensationFailure(CompensationFailurePolicy::Continue) und compensateInParallel(). Läufe starten über die SagaFlow-Fassade: run() stellt asynchron in die Queue, runSync() führt im Prozess aus – ideal für Test-Assertions. Versions-Pinning (version('v2')) hält laufende Runs an ihrer ursprünglichen Workflow-Definition fest.

Das Package benötigt PHP 8.5 und Laravel 13, steht unter MIT-Lizenz und wird per composer require discovery-ukraine/saga-lara-flow installiert, gefolgt von Migrationen und Config-Publishing. Die Konfiguration deckt Datenbankverbindung, Queue, Locking und Multi-Tenancy-Hooks ab (Capture-/Restore-Closures für den Tenant-Kontext). Artisan-Befehle: make:workflow, make:action, saga-flow:list, saga-flow:signal, saga-flow:prune sowie saga-flow:monitor, das minütlich eingeplant werden sollte, um Fristen zu überwachen. Dokumentation unter sagalaraflow.dev; Quellcode auf GitHub unter discovery-ukraine/saga-lara-flow.

Originalquelle lesen (Englisch) ↗

Artikel bewerten: 0

Leserforum

Noch keine Beiträge — eröffne die Debatte.

← Ökosystem — Page B1

"All the Code That's Fit to Ship" · The Daily Commit · Bildschirm-Ausgabe · Impressum · Datenschutz