Ακύρωση ροών εργασίας
Οι ροές εργασίας μπορούν να ακυρωθούν προγραμματιστικά ή μέσω του CLI. Όταν ακυρώνεται μια ροή εργασίας, το Queuety ορίζει την κατάστασή της σε cancelled, θάβει τυχόν εκκρεμείς ή υπό επεξεργασία εργασίες και εκτελεί έναν προαιρετικό χειριστή εκκαθάρισης.
Καταχώριση χειριστή εκκαθάρισης
Χρησιμοποιήστε το on_cancel() στο εργαλείο δημιουργίας ροής εργασίας για να καταχωρίσετε μια κλάση που εκτελείται όταν ακυρώνεται η ροή. Η κλάση χειριστή πρέπει να υλοποιεί μια μέθοδο handle( array $state ): void.
use Queuety\Queuety;
Queuety::workflow( 'import_data' )
->then( FetchDataHandler::class )
->then( TransformDataHandler::class )
->then( LoadDataHandler::class )
->on_cancel( ImportCleanupHandler::class )
->dispatch( [ 'source_url' => $url ] );
Ο χειριστής εκκαθάρισης λαμβάνει τη δημόσια κατάσταση της ροής εργασίας (όλα τα κλειδιά που δεν ξεκινούν με _):
class ImportCleanupHandler {
public function handle( array $state ): void {
// Clean up any partial imports.
if ( isset( $state['temp_table'] ) ) {
global $wpdb;
$wpdb->query( "DROP TABLE IF EXISTS {$state['temp_table']}" );
}
// Notify the user.
wp_mail(
$state['notify_email'] ?? '',
'Import cancelled',
'Your data import was cancelled.'
);
}
}
Ακύρωση μέσω του PHP
Καλέστε το Queuety::cancel_workflow() με το αναγνωριστικό της ροής εργασίας:
Queuety::cancel_workflow( $workflow_id );
Αυτή η μέθοδος:
- Κλειδώνει τη γραμμή της ροής εργασίας
- Ορίζει την κατάσταση της ροής εργασίας σε
cancelled - Θάβει όλες τις εκκρεμείς και υπό επεξεργασία εργασίες της ροής με το μήνυμα "Η ροή εργασίας ακυρώθηκε"
- Καταγράφει ένα συμβάν
workflow_cancelledκαι κάνει commit - Εκτελεί τις αντισταθμίσεις των ολοκληρωμένων βημάτων με αντίστροφη σειρά (αν έχουν καταχωριστεί μέσω του
compensate_with()) - Εκτελεί τον χειριστή εκκαθάρισης
on_cancel(αν έχει καταχωριστεί)
Προκύπτει ένα RuntimeException αν η ροή εργασίας είναι ήδη completed ή cancelled.
Ακύρωση μέσω του CLI
wp queuety workflow cancel <id>
| Επιλογή | Περιγραφή |
|---|---|
<id> |
Αναγνωριστικό ροής εργασιών προς ακύρωση (απαιτείται) |
wp queuety workflow cancel 42
Τι συμβαίνει κατά την ακύρωση
Όταν ακυρώνεται μια ροή εργασίας:
- Κατάσταση αλλάζει σε
cancelled - Αντισταθμίσεις βημάτων εκτελούνται με την αντίστροφη σειρά ολοκλήρωσης, αν τις έχετε συνδέσει με το
compensate_with() - Χειριστής εκκαθάρισης εκτελείται αφού η γραμμή της ροής εργασίας σημειωθεί ως
cancelled - Εκκρεμείς εργασίες της ροής εργασίας θάβονται αμέσως
- Εργασίες υπό επεξεργασία της ροής εργασίας θάβονται· όταν ολοκληρωθεί ο χειριστής που βρίσκεται σε εξέλιξη, η έξοδός του απορρίπτεται και η ροή εργασίας δεν προχωρά
- Ολοκληρωμένες εργασίες προηγούμενων βημάτων παραμένουν ως έχουν
- Καταχώριση αρχείου καταγραφής με συμβάν
workflow_cancelledαποθηκεύεται
Ακυρωμένη έναντι αποτυχημένης
| Πτυχή | Αποτυχημένη | Ακυρωμένη |
|---|---|---|
| Ενεργοποίηση | Ένα βήμα εξαντλεί τις προσπάθειες επανάληψης | Ρητή κλήση στο cancel_workflow() |
| Κατάσταση | failed |
cancelled |
| Δυνατότητα επανάληψης | Ναι, μέσω του retry_workflow(), εκτός αν η ροή εργασίας έχει ήδη υποστεί αντιστάθμιση |
Όχι |
| Χειριστής εκκαθάρισης | Δεν καλείται | Καλείται αν έχει καταχωριστεί μέσω του on_cancel() |
| Συμβάν αρχείου καταγραφής | workflow_failed |
workflow_cancelled |
Παράδειγμα: ακύρωση με επιβεβαίωση
Μια συνηθισμένη πρακτική είναι να ελέγχετε την κατάσταση της ροής εργασίας πριν την ακυρώσετε:
$status = Queuety::workflow_status( $workflow_id );
if ( null === $status ) {
throw new \RuntimeException( 'Workflow not found.' );
}
if ( 'running' === $status->status->value || 'paused' === $status->status->value ) {
Queuety::cancel_workflow( $workflow_id );
}