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.
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 _):
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:
Queuety::cancel_workflow( $workflow_id );
Šis metodas:
- Užrakina darbo eigos eilutę
- Nustato darbo eigos būseną į
cancelled - Perkelia visas laukiančias ir apdorojamas darbo eigos užduotis į paslėptų užduočių saugyklą su pranešimu "Darbo eiga atšaukta"
- Užregistruoja įvykį
workflow_cancelledir patvirtina operaciją - Atvirkštine tvarka vykdo užbaigtų žingsnių kompensavimo veiksmus (jei jie užregistruoti per
compensate_with()) - Paleidžia
on_cancelvalymo apdorojimo programą (jei ji užregistruota)
Išmetama RuntimeException klaida, jei darbo eiga jau yra completed arba cancelled.
Atšaukimas per CLI
wp queuety workflow cancel <id>
| Parinktis | Aprašymas |
|---|---|
<id> |
Atšaukiamos darbo eigos ID (privaloma) |
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ą:
$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 );
}