Μετάβαση στο περιεχόμενο

Ακύρωση ροών εργασίας

Οι ροές εργασίας μπορούν να ακυρωθούν προγραμματιστικά ή μέσω του CLI. Όταν ακυρώνεται μια ροή εργασίας, το Queuety ορίζει την κατάστασή της σε cancelled, θάβει τυχόν εκκρεμείς ή υπό επεξεργασία εργασίες και εκτελεί έναν προαιρετικό χειριστή εκκαθάρισης.

Καταχώριση χειριστή εκκαθάρισης

Χρησιμοποιήστε το on_cancel() στο εργαλείο δημιουργίας ροής εργασίας για να καταχωρίσετε μια κλάση που εκτελείται όταν ακυρώνεται η ροή. Η κλάση χειριστή πρέπει να υλοποιεί μια μέθοδο handle( array $state ): void.

PHP
use Queuety\Queuety;

Queuety::workflow( 'import_data' )
    ->then( FetchDataHandler::class )
    ->then( TransformDataHandler::class )
    ->then( LoadDataHandler::class )
    ->on_cancel( ImportCleanupHandler::class )
    ->dispatch( [ 'source_url' => $url ] );

Ο χειριστής εκκαθάρισης λαμβάνει τη δημόσια κατάσταση της ροής εργασίας (όλα τα κλειδιά που δεν ξεκινούν με _):

PHP
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() με το αναγνωριστικό της ροής εργασίας:

PHP
Queuety::cancel_workflow( $workflow_id );

Αυτή η μέθοδος:

  1. Κλειδώνει τη γραμμή της ροής εργασίας
  2. Ορίζει την κατάσταση της ροής εργασίας σε cancelled
  3. Θάβει όλες τις εκκρεμείς και υπό επεξεργασία εργασίες της ροής με το μήνυμα "Η ροή εργασίας ακυρώθηκε"
  4. Καταγράφει ένα συμβάν workflow_cancelled και κάνει commit
  5. Εκτελεί τις αντισταθμίσεις των ολοκληρωμένων βημάτων με αντίστροφη σειρά (αν έχουν καταχωριστεί μέσω του compensate_with())
  6. Εκτελεί τον χειριστή εκκαθάρισης 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

Παράδειγμα: ακύρωση με επιβεβαίωση

Μια συνηθισμένη πρακτική είναι να ελέγχετε την κατάσταση της ροής εργασίας πριν την ακυρώσετε:

PHP
$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 );
}