Queuety
Η μηχανή ροών εργασίας WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateΤελευταία έκδοση v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );Στην πράξη
Μια ροή εργασίας ορισμένη σε PHP και η εντολή worker που την εκτελεί.
Μια ροή εργασίας έγκρισης
Η ροή εργασίας εκτελεί ένα βήμα, περιμένει 24 ώρες και, στη συνέχεια, τίθεται σε παύση στο wait_for_approval() μέχρι μια άλλη διεργασία να στείλει το σήμα approval.
Η καθυστέρηση αποθηκεύεται στη βάση δεδομένων, επομένως διατηρείται μετά από επανεκκινήσεις worker και αναπτύξεις. Ένα σήμα που αποστέλλεται νωρίτερα καταγράφεται και λαμβάνεται υπόψη όταν η ροή εργασίας φτάσει στην αναμονή. Η ακύρωση της εκτέλεσης καλεί τον χειριστή on_cancel().
$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' ] );# Single worker on default queue
wp queuety work
# Process a specific queue
wp queuety work --queue=emails
# Process multiple queues in priority order
wp queuety work --queue=critical,default,low
# One-shot mode
wp queuety work --once
# Multi-worker mode
wp queuety work --workers=4
# Adaptive worker pool
wp queuety work --queue=providers --min-workers=2 --max-workers=6Άμεσες διεκδικήσεις MySQL
Κάθε worker εκτελείται ως διεργασία WP-CLI μεγάλης διάρκειας και αναλαμβάνει εργασίες απευθείας από το MySQL με FOR UPDATE SKIP LOCKED.
Ανθεκτικές ροές εργασίας
Διαδικασίες πολλών βημάτων με μόνιμη κατάσταση που επιβιώνουν από χρονικά όρια PHP, καταρρεύσεις και επαναλήψεις.
Μηχανές καταστάσεων
Κατάσταση μεγάλης διάρκειας, βασισμένη σε συμβάντα, με Queuety::machine(): ορίστε καταστάσεις και μεταβάσεις, στείλτε συμβάντα και διαβάστε το χρονολόγιο.
Σήματα και εγκρίσεις
Τα wait_for_signal(), wait_for_approval() και wait_for_input() θέτουν σε παύση μια ροή εργασίας μέχρι να φτάσει εξωτερική είσοδος.
Επίπεδα προτεραιότητας
Τέσσερα επίπεδα, από Χαμηλή έως Επείγουσα. Σε κάθε ουρά, οι εργασίες υψηλότερης προτεραιότητας αναλαμβάνονται πρώτες.
Περιορισμός ρυθμού
Όρια ανά χειριστή σε κυλιόμενο χρονικό παράθυρο. Ένας worker που αναλαμβάνει εργασία με περιορισμό ρυθμού την επιστρέφει στην ουρά και περιμένει.
Επαναλαμβανόμενες εργασίες
Προγραμματισμός βάσει διαστημάτων και cron. Ενσωματωμένος αναλυτής cron χωρίς εξωτερικές εξαρτήσεις.
Παράλληλα βήματα
Εκτελέστε τα βήματα της ροής εργασίας ταυτόχρονα και περιμένετε να ολοκληρωθούν όλα πριν συνεχίσετε.
Μετρήσεις & καταγραφή
Μόνιμο αρχείο καταγραφής στη βάση δεδομένων με ρυθμό διεκπεραίωσης, μέση διάρκεια και διάρκεια p95, καθώς και ποσοστό σφαλμάτων ανά χειριστή.
Εφεδρική λειτουργία WP-Cron
Χωρίς πρόσβαση σε κέλυφος, ένα συμβάν cron WordPress που εκτελείται μία φορά το λεπτό εκκινεί έναν worker μίας εκτέλεσης για την προεπιλεγμένη ουρά.
Ενδιάμεσο λογισμικό
Ενδιάμεσο λογισμικό εργασιών σε μορφή onion για περιορισμούς ρυθμού, περιορισμό εξαιρέσεων, μοναδικότητα, χρονικά όρια και προστασία από επικαλύψεις.
PHP 8.2+
Enums, κλάσεις readonly, εκφράσεις match, προώθηση κατασκευαστή και χαρακτηριστικά PHP.
Γιατί Queuety
Η κατάσταση βρίσκεται στο MySQL
Οι γραμμές ουράς, η κατάσταση ροής εργασίας, τα αρχεία καταγραφής, τα σήματα και τα τμήματα ροής αποθηκεύονται στο MySQL, επομένως η επανεκκίνηση ενός worker δεν χάνει καμία κατάσταση ενορχήστρωσης. Σε κάθε όριο βήματος, η ενημέρωση της κατάστασης, η ολοκλήρωση της εργασίας και η προσθήκη της επόμενης στην ουρά καταχωρίζονται σε μία συναλλαγή.
Εκτός αιτήματος σελίδας
Το WP-Cron ενεργοποιείται μόνο κατά τις επισκέψεις σε σελίδες και μια κλήση LLM διάρκειας 60 δευτερολέπτων διακόπτεται από χρονικό όριο PHP 30 δευτερολέπτων. Οι workers Queuety εκτελούνται σε διεργασία WP-CLI μεγάλης διάρκειας και αναλαμβάνουν εργασίες χωρίς να περιμένουν επισκεψιμότητα.
Δικλίδες ασφαλείας για εκτελέσεις agent
Τα for_each() με λειτουργία απαρτίας, πύλες έγκρισης και όρια όπως max_transitions() και max_state_bytes() διατηρούν τις εκτελέσεις agent μεγάλης διάρκειας εντός καθορισμένων ορίων.
Χρήση εκτός WordPress
Ο πυρήνας που βασίζεται στη βάση δεδομένων εκτελείται σε οποιαδήποτε διεργασία PHP που μπορεί να συνδεθεί στην ίδια βάση δεδομένων, επομένως μια άλλη εφαρμογή μπορεί να αποστέλλει εργασίες, να στέλνει σήματα και να διαβάζει την κατάσταση ροής εργασίας. Οι ενεργοποιητές ενεργειών, η γέφυρα WP-Cron και οι εντολές WP-CLI εξακολουθούν να απαιτούν WordPress.
Σε σύγκριση με
Πώς σχετίζεται το Queuety με τους προγραμματιστές και τις μηχανές ροών εργασίας WordPress που ήδη γνωρίζουν.
| Εργαλείο | Κατάλληλο για | Διαφορά με το Queuety |
|---|---|---|
| WP-Cron | Κατάλληλο γιαΕνσωματωμένο στο WordPress, δεν χρειάζεται πρόσβαση στον προγραμματιστή του συστήματος σε κοινόχρηστη φιλοξενία, ενώ μια εργασία που δεν εκτελείται στην ώρα της εκτελείται στην επόμενη φόρτωση σελίδας αντί να απορρίπτεται. | Διαφορά με το QueuetyΟι workers του Queuety λειτουργούν ανεξάρτητα από την επισκεψιμότητα του ιστότοπου και χρειάζονται μια διεργασία wp queuety work που εκτελείται συνεχώς. Η γέφυρά του WP-Cron μετατρέπει τα επαναλαμβανόμενα συμβάντα σε προγραμματισμένες εργασίες, αλλά δεν εκτελεί ακόμη τα callbacks των hook τους, οπότε το WP-Cron εξακολουθεί να τα διαχειρίζεται. |
| Action Scheduler | Κατάλληλο γιαΣχεδιασμένο για διανομή μέσα σε πρόσθετα και θέματα χωρίς να απαιτείται πρόσβαση στον διακομιστή. Επεξεργάζεται εκατομμύρια πληρωμές συνδρομών και webhook για το WooCommerce κάθε μήνα και καταγράφει κάθε ενέργεια σε διεπαφή διαχείρισης. | Διαφορά με το QueuetyΤο Action Scheduler εκτελεί ένα hook αργότερα, όπως ένα καθυστερημένο do_action(). Το Queuety προσθέτει ροές εργασίας πολλών βημάτων με κατάσταση που διατηρείται ανάμεσα στα βήματα, αναμονές για σήματα και εγκρίσεις, καθώς και μηχανές καταστάσεων. Μπορείτε να τις επιθεωρείτε με εντολές WP-CLI, όπως wp queuety workflow timeline. |
| Temporal | Κατάλληλο γιαΠλατφόρμα ανθεκτικής εκτέλεσης: ένα ιστορικό συμβάντων καταγράφει κάθε βήμα μιας ροής εργασίας, ώστε η εκτέλεση να συνεχίζεται από το τελευταίο καταγεγραμμένο συμβάν μετά από κατάρρευση ή διακοπή λειτουργίας. Το Temporal Cloud προσφέρεται ως εναλλακτική λύση στη φιλοξενία της υπηρεσίας από εσάς. | Διαφορά με το QueuetyΜια υπηρεσία Temporal είναι ένας διακομιστής Go μαζί με μια βάση δεδομένων που εκτελείται δίπλα στην εφαρμογή σας. Το Queuety διατηρεί την κατάστασή του σε πίνακες MySQL στη σύνδεση βάσης δεδομένων WordPress και εκτελεί workers μέσω του WP-CLI. |
Ερωτήσεις και απαντήσεις
Σύντομες απαντήσεις από την τεκμηρίωση του Queuety.
Όχι για απλές εργασίες στην προεπιλεγμένη ουρά. Το πρόσθετο εκτελεί έναν worker μίας εκτέλεσης μέσω του WordPress cron κάθε λεπτό, όσο ενεργοποιείται το WordPress cron, και διαχειρίζεται μία εργασία ανά εκτέλεση. Τα επαναλαμβανόμενα προγράμματα, οι προσαρμοσμένες ουρές και η χαμηλότερη καθυστέρηση απαιτούν μια αποκλειστική διεργασία wp queuety work.
Όχι. Χρειάζεται είτε mysqli είτε pdo_mysql και από προεπιλογή επιλέγει το mysqli στο WordPress. Ορίστε το QUEUETY_DB_DRIVER σε auto, mysqli ή pdo για να επιβάλετε ένα πρόγραμμα οδήγησης.
Οι εργασίες αναλαμβάνονται με SELECT ... FOR UPDATE SKIP LOCKED, το οποίο υποστηρίζει το MySQL από την έκδοση 8.0 και το MariaDB από την έκδοση 10.6. Το CI του έργου εκτελείται στο MySQL 8.0.
Ναι, ο πυρήνας που βασίζεται στη βάση δεδομένων: οι εργασίες, οι workers, οι ροές εργασίας, τα σήματα, οι μηχανές καταστάσεων, τα τεχνουργήματα, τα αρχεία καταγραφής, οι μετρήσεις και τα προγράμματα εκτελούνται μέσω μιας άμεσης σύνδεσης. Οι ομάδες worker χρειάζονται επίσης τις σταθερές DB_HOST, DB_NAME, DB_USER και DB_PASSWORD. Τα Queuety::on_action(), replace_wp_cron(), η αρχικοποίηση του πρόσθετου και οι εντολές wp queuety εξακολουθούν να απαιτούν WordPress.
Όχι ακόμη. Το Queuety::replace_wp_cron() μετατρέπει τα επαναλαμβανόμενα συμβάντα wp_schedule_event() σε προγράμματα Queuety, αλλά οι συναρτήσεις επανάκλησης των hook δεν εκτελούνται ακόμη, επομένως διατηρήστε το WP-Cron για συμβάντα που πρέπει να ενεργοποιηθούν. Τα συμβάντα από το wp_schedule_single_event() παραμένουν στο WP-Cron.
Η εντολή wp queuety work --workers=N δημιουργεί σταθερό σύνολο διεργασιών και επανεκκινεί τα παιδιά που καταρρέουν· απαιτεί τις επεκτάσεις pcntl και posix. Οι επιλογές --min-workers και --max-workers εκτελούν ένα προσαρμοζόμενο σύνολο που μεγαλώνει όταν αυξάνονται οι εκκρεμείς εργασίες και μικραίνει όταν μειώνονται.
Εγκαταστήστε το πρόσθετο, εκκινήστε έναν worker και ακολουθήστε τους οδηγούς από την πρώτη εργασία σας έως τις ροές εργασίας εγκρίσεων και τις μηχανές καταστάσεων.