Pereiti prie turinio

Darbo eigos atšaukimas

Darbo eigas galima atšaukti programiškai arba per CLI. Atšaukus darbo eigą, Queuety nustato jos būseną į cancelled, perkelia visas laukiančias arba apdorojamas užduotis į paslėptų užduočių saugyklą ir paleidžia pasirenkamą valymo apdorojimo programą.

Valymo apdorojimo programos registravimas

Naudokite on_cancel() darbo eigos kūrimo priemonėje, kad užregistruotumėte klasę, kuri vykdoma atšaukus darbo eigą. Apdorojimo programos klasė turi įgyvendinti metodą 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 ] );

Valymo apdorojimo programa gauna viešąją darbo eigos būseną (visus raktus, kurie neprasideda _):

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

Atšaukimas per PHP

Iškvieskite Queuety::cancel_workflow() ir nurodykite darbo eigos ID:

PHP
Queuety::cancel_workflow( $workflow_id );

Šis metodas:

  1. Užrakina darbo eigos eilutę
  2. Nustato darbo eigos būseną į cancelled
  3. Perkelia visas laukiančias ir apdorojamas darbo eigos užduotis į paslėptų užduočių saugyklą su pranešimu "Darbo eiga atšaukta"
  4. Užregistruoja įvykį workflow_cancelled ir patvirtina operaciją
  5. Atvirkštine tvarka vykdo užbaigtų žingsnių kompensavimo veiksmus (jei jie užregistruoti per compensate_with())
  6. Paleidžia on_cancel valymo apdorojimo programą (jei ji užregistruota)

Išmetama RuntimeException klaida, jei darbo eiga jau yra completed arba cancelled.

Atšaukimas per CLI

Shell
wp queuety workflow cancel <id>
Parinktis Aprašymas
<id> Atšaukiamos darbo eigos ID (privaloma)
Shell
wp queuety workflow cancel 42

Kas nutinka atšaukus

Atšaukus darbo eigą:

  • Būsena pakeičiama į cancelled
  • Žingsnių kompensavimo veiksmai vykdomi atvirkštine užbaigimo tvarka, jei juos pridėjote per compensate_with()
  • Valymo apdorojimo programa paleidžiama pažymėjus darbo eigos eilutę būsena cancelled
  • Laukiančios užduotys darbo eigai iškart perkeliamos į paslėptų užduočių saugyklą
  • Apdorojamos užduotys perkeliamos į paslėptų užduočių saugyklą; baigus vykdyti apdorojimo programą, jos rezultatas atmetamas ir darbo eiga netęsiama
  • Užbaigtos užduotys iš ankstesnių žingsnių paliekamos nepakeistos
  • Žurnalo įrašas su įvykiu workflow_cancelled įrašomas

Atšaukta ir nepavykusi eiga

Aspektas Nepavykusi Atšaukta
Paleidiklis Žingsnis išnaudoja pakartotinių bandymų skaičių Aiškus cancel_workflow() iškvietimas
Būsena failed cancelled
Galima pakartoti Taip, per retry_workflow(), nebent darbo eigos kompensavimo veiksmai jau atlikti Ne
Valymo apdorojimo programa Nekviečiama Kviečiama, jei užregistruota per on_cancel()
Žurnalo įvykis workflow_failed workflow_cancelled

Pavyzdys: atšaukimas su patvirtinimu

Dažnas šablonas – prieš atšaukiant patikrinti darbo eigos būseną:

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