Työnkulun peruuttaminen
Työnkulkuja voi peruuttaa ohjelmallisesti tai CLI-toiminnolla. Kun työnkulku peruutetaan, Queuety asettaa sen tilaksi cancelled, hautaa odottavat tai käsiteltävät työt ja suorittaa halutessasi siivouskäsittelijän.
Siivouskäsittelijän rekisteröinti
Rekisteröi työnkulun muodostajaan on_cancel()-toiminnolla luokka, joka suoritetaan työnkulun peruuntuessa. Käsittelijäluokan on toteutettava handle( array $state ): void-menetelmä.
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 ] );
Siivouskäsittelijä saa julkisen työnkulun tilan (kaikki avaimet, jotka eivät ala merkillä _):
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.'
);
}
}
Peruuttaminen PHP-toiminnolla
Kutsu Queuety::cancel_workflow()-toimintoa työnkulun tunnisteella:
PHP
Queuety::cancel_workflow( $workflow_id );
Tämä menetelmä:
- Lukitsee työnkulun rivin
- Asettaa työnkulun tilaksi
cancelled - Hautaa kaikki työnkulun odottavat ja käsiteltävät työt viestillä "Workflow cancelled"
- Kirjaa
workflow_cancelled-tapahtuman ja vahvistaa tapahtuman - Suorittaa valmiiden vaiheiden korvaustoiminnot käänteisessä järjestyksessä (jos niitä on rekisteröity toiminnolla
compensate_with()) - Suorittaa
on_cancel-siivouskäsittelijän (jos se on rekisteröity)
RuntimeException heitetään, jos työnkulku on jo tilassa completed tai cancelled.
Peruuttaminen CLI-toiminnolla
Shell
wp queuety workflow cancel <id>
| Valitsin | Kuvaus |
|---|---|
<id> |
Peruutettavan työnkulun tunniste (pakollinen) |
Shell
wp queuety workflow cancel 42
Mitä peruutettaessa tapahtuu
Kun työnkulku peruutetaan:
- Tila muuttuu tilaksi
cancelled - Vaiheiden korvaustoiminnot suoritetaan valmistumisjärjestykseen nähden käänteisessä järjestyksessä, jos liitit ne toiminnolla
compensate_with() - Siivouskäsittelijä suoritetaan, kun työnkulun rivi on merkitty tilaan
cancelled - Odottavat työt työnkulussa haudataan välittömästi
- Käsiteltävät työt työnkulussa haudataan; kun käynnissä oleva käsittelijä valmistuu, sen tuloste hylätään eikä työnkulku etene
- Valmiit työt aiemmista vaiheista jätetään ennalleen
- Lokimerkintä, jonka tapahtuma on
workflow_cancelled, tallennetaan
Peruutettu ja epäonnistunut
| Ominaisuus | Epäonnistunut | Peruutettu |
|---|---|---|
| Käynnistin | Vaihe käyttää uudelleenyritysyrityksensä loppuun | cancel_workflow()-toiminnon nimenomainen kutsu |
| Tila | failed |
cancelled |
| Voiko yrittää uudelleen | Kyllä, toiminnolla retry_workflow(), ellei työnkululle ole jo tehty korvaustoimintoja |
Ei |
| Siivouskäsittelijä | Ei kutsuta | Kutsutaan, jos rekisteröity toiminnolla on_cancel() |
| Lokitapahtuma | workflow_failed |
workflow_cancelled |
Esimerkki: peruuttaminen vahvistuksen kanssa
Yleinen käytäntö on tarkistaa työnkulun tila ennen sen peruuttamista:
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 );
}