Preskočiť na obsah

Zrušenie pracovného postupu

Pracovné postupy možno zrušiť programovo alebo cez CLI. Pri zrušení pracovného postupu nastaví Queuety jeho stav na cancelled, ukryje všetky čakajúce alebo spracúvané úlohy a spustí voliteľnú obslužnú funkciu na vyčistenie.

Registrácia obslužnej funkcie na vyčistenie

Na registráciu triedy, ktorá sa spustí pri zrušení pracovného postupu, použite on_cancel() na zostavovači pracovného postupu. Trieda obslužnej funkcie musí implementovať metódu 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 ] );

Obslužná funkcia na vyčistenie dostane verejný stav pracovného postupu (všetky kľúče, ktoré nezačínajú na _):

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

Zrušenie cez PHP

Zavolajte Queuety::cancel_workflow() a odovzdajte ID pracovného postupu:

PHP
Queuety::cancel_workflow( $workflow_id );

Táto metóda:

  1. Uzamkne riadok pracovného postupu
  2. Nastaví stav pracovného postupu na cancelled
  3. Ukryje všetky čakajúce a spracúvané úlohy pracovného postupu so správou "Workflow cancelled"
  4. Zapíše udalosť workflow_cancelled do logu a potvrdí transakciu
  5. Spustí kompenzačné akcie dokončených krokov v opačnom poradí (ak boli zaregistrované cez compensate_with())
  6. Spustí obslužnú funkciu na vyčistenie on_cancel (ak bola zaregistrovaná)

Ak je pracovný postup už completed alebo cancelled, vyvolá sa výnimka RuntimeException.

Zrušenie cez CLI

Shell
wp queuety workflow cancel <id>
Možnosť Opis
<id> ID pracovného postupu, ktorý sa má zrušiť (povinné)
Shell
wp queuety workflow cancel 42

Čo sa stane pri zrušení

Pri zrušení pracovného postupu:

  • Stav sa zmení na cancelled
  • Kompenzácie krokov sa vykonajú v opačnom poradí dokončenia, ak ste ich pripojili pomocou compensate_with()
  • Obslužná funkcia na vyčistenie sa spustí po označení riadka pracovného postupu ako cancelled
  • Čakajúce úlohy pracovného postupu sa okamžite ukryjú
  • Spracúvané úlohy pracovného postupu sa ukryjú; po dokončení práve bežiacej obslužnej funkcie sa jej výstup zahodí a pracovný postup nepokročí
  • Dokončené úlohy z predchádzajúcich krokov zostanú nezmenené
  • Záznam v logu s udalosťou workflow_cancelled sa uloží

Zrušený a neúspešný stav

Vlastnosť Neúspešný Zrušený
Spúšťač Krok vyčerpá počet opakovaných pokusov Explicitné volanie cancel_workflow()
Stav failed cancelled
Možno opakovať Áno, cez retry_workflow(), ak už neprebehla kompenzácia pracovného postupu Nie
Obslužná funkcia na vyčistenie Nespustí sa Spustí sa, ak je zaregistrovaná cez on_cancel()
Udalosť v logu workflow_failed workflow_cancelled

Príklad: zrušenie s potvrdením

Bežným vzorom je pred zrušením skontrolovať stav pracovného postupu:

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