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.
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 _):
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:
Queuety::cancel_workflow( $workflow_id );
Táto metóda:
- Uzamkne riadok pracovného postupu
- Nastaví stav pracovného postupu na
cancelled - Ukryje všetky čakajúce a spracúvané úlohy pracovného postupu so správou "Workflow cancelled"
- Zapíše udalosť
workflow_cancelleddo logu a potvrdí transakciu - Spustí kompenzačné akcie dokončených krokov v opačnom poradí (ak boli zaregistrované cez
compensate_with()) - 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
wp queuety workflow cancel <id>
| Možnosť | Opis |
|---|---|
<id> |
ID pracovného postupu, ktorý sa má zrušiť (povinné) |
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_cancelledsa 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:
$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 );
}