Liigu sisu juurde

Töövoo tühistamine

Töövooge saab tühistada programmiliselt või funktsiooni CLI kaudu. Töövoo tühistamisel seab Queuety selle olekuks cancelled, matab kõik ootel või töötlemisel olevad tööd ning käivitab valikulise puhastuskäitleja.

Puhastuskäitleja registreerimine

Kasuta töövoo koostajal on_cancel(), et registreerida klass, mis käivitub töövoo tühistamisel. Käitlejaklass peab rakendama meetodi 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 ] );

Puhastuskäitleja saab avaliku töövoo oleku (kõik võtmed, mis ei alga märgiga _):

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

Tühistamine funktsiooni PHP kaudu

Kutsu välja Queuety::cancel_workflow() koos töövoo ID-ga:

PHP
Queuety::cancel_workflow( $workflow_id );

See meetod teeb järgmist:

  1. Lukustab töövoo rea
  2. Seab töövoo olekuks cancelled
  3. Matab kõik töövoo ootel ja töötlemisel olevad tööd sõnumiga "Töövoog tühistatud"
  4. Logib sündmuse workflow_cancelled ja kinnitab muudatused
  5. Käivitab lõpetatud sammude kompensatsioonid vastupidises järjekorras (kui need on registreeritud funktsiooniga compensate_with())
  6. Käivitab puhastuskäitleja on_cancel (kui see on registreeritud)

Kui töövoog on juba olekus completed või cancelled, visatakse RuntimeException.

Tühistamine funktsiooni CLI kaudu

Shell
wp queuety workflow cancel <id>
Suvand Kirjeldus
<id> Tühistatava töövoo ID (nõutav)
Shell
wp queuety workflow cancel 42

Mis juhtub tühistamisel

Töövoo tühistamisel:

  • Olek muutub olekuks cancelled
  • Sammude kompensatsioonid käivitatakse lõpetamise järjekorra pöördjärjestuses, kui lisasid need funktsiooniga compensate_with()
  • Puhastuskäitleja käivitub pärast töövoo rea olekusse cancelled märkimist
  • Töövoo ootel tööd maetakse kohe
  • Töövoo töötlemisel olevad tööd maetakse; kui pooleli olev käitleja lõpetab, visatakse selle väljund ära ja töövoog ei jätku
  • Varasemate sammude lõpetatud tööd jäävad muutmata
  • Salvestatakse logikirje sündmusega workflow_cancelled

Tühistatud ja nurjunud töövoog

Aspekt Nurjunud Tühistatud
Käivitaja Samm ammendab korduskatsed Otsene cancel_workflow() väljakutse
Olek failed cancelled
Kas saab uuesti proovida Jah, funktsiooniga retry_workflow(), välja arvatud juhul, kui töövoo kompensatsioonid on juba käivitatud Ei
Puhastuskäitleja Ei käivitata Käivitatakse, kui see on registreeritud funktsiooniga on_cancel()
Logisündmus workflow_failed workflow_cancelled

Näide: tühistamine kinnitusega

Levinud muster on kontrollida enne tühistamist töövoo olekut:

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