Siirry sisältöön

Työnkulun peruuttaminen

Työnkulkuja voi peruuttaa ohjelmallisesti tai CLI-toiminnolla. Kun työnkulku peruutetaan, Queuety asettaa sen tilaksi cancelled, hautaa odottavat tai käsiteltävät työt ja suorittaa halutessasi siivouskäsittelijän.

Siivouskäsittelijän rekisteröinti

Rekisteröi työnkulun muodostajaan on_cancel()-toiminnolla luokka, joka suoritetaan työnkulun peruuntuessa. Käsittelijäluokan on toteutettava handle( array $state ): void-menetelmä.

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 ] );

Siivouskäsittelijä saa julkisen työnkulun tilan (kaikki avaimet, jotka eivät ala merkillä _):

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.'
        );
    }
}

Peruuttaminen PHP-toiminnolla

Kutsu Queuety::cancel_workflow()-toimintoa työnkulun tunnisteella:

PHP
Queuety::cancel_workflow( $workflow_id );

Tämä menetelmä:

  1. Lukitsee työnkulun rivin
  2. Asettaa työnkulun tilaksi cancelled
  3. Hautaa kaikki työnkulun odottavat ja käsiteltävät työt viestillä "Workflow cancelled"
  4. Kirjaa workflow_cancelled-tapahtuman ja vahvistaa tapahtuman
  5. Suorittaa valmiiden vaiheiden korvaustoiminnot käänteisessä järjestyksessä (jos niitä on rekisteröity toiminnolla compensate_with())
  6. Suorittaa on_cancel-siivouskäsittelijän (jos se on rekisteröity)

RuntimeException heitetään, jos työnkulku on jo tilassa completed tai cancelled.

Peruuttaminen CLI-toiminnolla

Shell
wp queuety workflow cancel <id>
Valitsin Kuvaus
<id> Peruutettavan työnkulun tunniste (pakollinen)
Shell
wp queuety workflow cancel 42

Mitä peruutettaessa tapahtuu

Kun työnkulku peruutetaan:

  • Tila muuttuu tilaksi cancelled
  • Vaiheiden korvaustoiminnot suoritetaan valmistumisjärjestykseen nähden käänteisessä järjestyksessä, jos liitit ne toiminnolla compensate_with()
  • Siivouskäsittelijä suoritetaan, kun työnkulun rivi on merkitty tilaan cancelled
  • Odottavat työt työnkulussa haudataan välittömästi
  • Käsiteltävät työt työnkulussa haudataan; kun käynnissä oleva käsittelijä valmistuu, sen tuloste hylätään eikä työnkulku etene
  • Valmiit työt aiemmista vaiheista jätetään ennalleen
  • Lokimerkintä, jonka tapahtuma on workflow_cancelled, tallennetaan

Peruutettu ja epäonnistunut

Ominaisuus Epäonnistunut Peruutettu
Käynnistin Vaihe käyttää uudelleenyritysyrityksensä loppuun cancel_workflow()-toiminnon nimenomainen kutsu
Tila failed cancelled
Voiko yrittää uudelleen Kyllä, toiminnolla retry_workflow(), ellei työnkululle ole jo tehty korvaustoimintoja Ei
Siivouskäsittelijä Ei kutsuta Kutsutaan, jos rekisteröity toiminnolla on_cancel()
Lokitapahtuma workflow_failed workflow_cancelled

Esimerkki: peruuttaminen vahvistuksen kanssa

Yleinen käytäntö on tarkistaa työnkulun tila ennen sen peruuttamista:

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