Zum Inhalt springen

Queuety

Die WordPress Workflow-Engine.

Terminal
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate

Neueste Version v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+

In der Praxis

Ein in PHP definierter Workflow und der Worker-Befehl, der ihn ausführt.

Ein Genehmigungsworkflow

Der Workflow führt einen Schritt aus, wartet 24 Stunden und pausiert dann bei wait_for_approval(), bis ein anderer Prozess das Signal approval sendet.

Die Verzögerung wird in der Datenbank gespeichert und bleibt daher bei Worker-Neustarts und Deployments erhalten. Ein vorzeitig gesendetes Signal wird aufgezeichnet und verarbeitet, sobald der Workflow die Wartephase erreicht. Beim Abbrechen des Durchlaufs wird der Handler on_cancel() aufgerufen.

PHP
$workflow_id = Queuety::workflow( 'approval_flow' )
    ->then( SubmitRequestHandler::class )
    ->delay( hours: 24 )
    ->wait_for_approval()
    ->then( ProcessApprovalHandler::class )
    ->on_cancel( CleanupHandler::class )
    ->dispatch( [ 'request_id' => 99 ] );

// Later, from another process:
Queuety::signal( $workflow_id, 'approval', [ 'approved_by' => 'admin@example.com' ] );

Direkte MySQL-Übernahme

Jeder Worker läuft in einem langlebigen WP-CLI-Prozess und übernimmt Jobs direkt aus MySQL mit FOR UPDATE SKIP LOCKED.

Dauerhafte Workflows

Mehrstufige Prozesse mit dauerhaft gespeichertem Zustand, die PHP-Zeitüberschreitungen, Abstürze und erneute Versuche überstehen.

Zustandsautomaten

Langlebiger, ereignisgesteuerter Zustand mit Queuety::machine(): Definiere Zustände und Übergänge, sende Ereignisse und lies den Zeitverlauf.

Signale und Freigaben

wait_for_signal(), wait_for_approval() und wait_for_input() pausieren einen Workflow, bis eine externe Eingabe eintrifft.

Prioritätsstufen

Vier Stufen von niedrig bis dringend. Innerhalb einer Warteschlange werden Jobs mit höherer Priorität zuerst übernommen.

Ratenbegrenzung

Limits pro Handler innerhalb eines gleitenden Zeitfensters. Übernimmt ein Worker einen Job mit Ratenbegrenzung, legt er ihn zurück und wartet.

Wiederkehrende Jobs

Zeitplanung auf Basis von Intervallen und cron. Integrierter cron-Parser ohne externe Abhängigkeiten.

Parallele Schritte

Führe Workflow-Schritte parallel aus und warte, bis alle abgeschlossen sind, bevor es weitergeht.

Metriken und Protokollierung

Ein dauerhaftes Datenbankprotokoll mit Durchsatz, durchschnittlicher Dauer, p95-Dauer und Fehlerrate pro Handler.

WP-Cron-Fallback

Ohne Shell-Zugriff führt ein WordPress cron-Ereignis einmal pro Minute einen einmaligen Worker für die Standardwarteschlange aus.

Middleware

Job-Middleware nach dem Onion-Prinzip für Ratenbegrenzungen, Drosselung bei Ausnahmen, Eindeutigkeit, Timeouts und Schutz vor Überschneidungen.

PHP 8.2+

Enums, readonly-Klassen, match-Ausdrücke, Constructor Promotion und PHP-Attribute.

Warum Queuety

Der Zustand liegt in MySQL

Warteschlangen-Einträge, Workflow-Zustand, Protokolle, Signale und gestreamte Teile werden in MySQL gespeichert. Daher geht bei einem Worker-Neustart kein Orchestrierungszustand verloren. An jeder Schrittgrenze werden die Zustandsänderung, der Job-Abschluss und das Einreihen des nächsten Jobs in einer Transaktion übernommen.

Unabhängig von Seitenaufrufen

WP-Cron wird nur bei Seitenaufrufen ausgelöst, und ein 60-sekündiger LLM-Aufruf wird durch ein 30-sekündiges PHP-Timeout beendet. Queuety-Worker laufen in einem langlebigen WP-CLI-Prozess und nehmen Aufgaben unabhängig vom Traffic auf.

Leitplanken für Agentenläufe

for_each() mit Quorum-Modus, Genehmigungsschranken und Begrenzungen wie max_transitions() und max_state_bytes() halten lange Agentenläufe innerhalb eines definierten Rahmens.

Auch außerhalb von WordPress nutzbar

Der datenbankgestützte Kern läuft in jedem PHP-Prozess, der dieselbe Datenbank öffnen kann. So kann eine andere App Jobs einreihen, Signale senden und den Workflow-Status lesen. Action-Trigger, die WP-Cron-Brücke und die WP-CLI-Befehle benötigen weiterhin WordPress.

Im Vergleich zu

Wie Queuety zu den Schedulern und Workflow-Engines passt, die WordPress-Entwickler bereits kennen.

Queuety im Vergleich zu anderen Werkzeugen
WP-Cron Gut geeignet fürIn WordPress integriert, benötigt es auf Shared Hosting keinen Zugriff auf den System-Scheduler. Eine Aufgabe, deren Ausführungszeit verpasst wurde, läuft beim nächsten Seitenaufruf statt ganz auszufallen. Unterschiede zu QueuetyQueuety-Worker laufen unabhängig vom Website-Traffic und benötigen einen langlebigen wp queuety work-Prozess. Die WP-Cron-Brücke wandelt wiederkehrende Ereignisse in Zeitpläne um, führt deren Hook-Callbacks aber noch nicht aus. Dafür bleibt WP-Cron zuständig.
Action Scheduler Gut geeignet fürFür die Verteilung in Plugins und Themes ohne erforderlichen Serverzugriff entwickelt. Verarbeitet jeden Monat Millionen Zahlungen für Subscriptions und Webhooks für WooCommerce und protokolliert jede Aktion in einer Admin-Oberfläche. Unterschiede zu QueuetyAction Scheduler führt einen Hook zu einem späteren Zeitpunkt aus, etwa einen verzögerten do_action(). Queuety ergänzt mehrstufige Workflows mit dauerhaftem Zustand zwischen den Schritten, Wartezeiten auf Signale und Genehmigungen sowie Zustandsautomaten. Sie lassen sich über WP-CLI-Befehle wie wp queuety workflow timeline prüfen.
Temporal Gut geeignet fürEine Plattform für dauerhafte Ausführung: Im Event-Verlauf wird jeder Workflowschritt aufgezeichnet. Nach Abstürzen oder Ausfällen wird ein Durchlauf ab dem letzten gespeicherten Ereignis fortgesetzt. Temporal Cloud ist eine Alternative zum Selbsthosting des Dienstes. Unterschiede zu QueuetyEin Temporal Service ist ein Go-Server mit Datenbank, der neben deiner Anwendung läuft. Queuety speichert seinen Zustand in MySQL-Tabellen über die WordPress-Datenbankverbindung und führt Worker über WP-CLI aus.

Fragen und Antworten

Kurze Antworten aus der Queuety-Dokumentation.

Installiere das Plugin, starte einen Worker und folge den Anleitungen – vom ersten Job bis zu Genehmigungsworkflows und Zustandsautomaten.