Pāriet uz saturu

Darbplūsmas atcelšana

Darbplūsmas var atcelt programmatiski vai ar CLI. Kad darbplūsma tiek atcelta, Queuety iestata tās statusu uz cancelled, noglabā visas gaidošās vai apstrādē esošās darbvietas un palaiž izvēles tīrīšanas apstrādātāju.

Tīrīšanas apstrādātāja reģistrēšana

Izmantojiet on_cancel() darbplūsmas veidotājā, lai reģistrētu klasi, kas tiek palaista, kad darbplūsma tiek atcelta. Apstrādātāja klasei jāimplementē metode 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 ] );

Tīrīšanas apstrādātājs saņem publisko darbplūsmas stāvokli (visas atslēgas, kas nesākas ar _):

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

Atcelšana, izmantojot PHP

Izsauciet Queuety::cancel_workflow() ar darbplūsmas ID:

PHP
Queuety::cancel_workflow( $workflow_id );

Šī metode:

  1. Bloķē darbplūsmas rindu
  2. Iestata darbplūsmas statusu uz cancelled
  3. Noglabā visas gaidošās un apstrādē esošās darbplūsmas darbvietas ar ziņojumu "Workflow cancelled"
  4. Reģistrē workflow_cancelled notikumu un apstiprina izmaiņas
  5. Apgrieztā secībā palaiž pabeigto darbību kompensācijas (ja tādas reģistrētas, izmantojot compensate_with())
  6. Palaiž on_cancel tīrīšanas apstrādātāju (ja tas reģistrēts)

Ja darbplūsma jau ir completed vai cancelled, tiek izmests RuntimeException.

Atcelšana, izmantojot CLI

Apvalks
wp queuety workflow cancel <id>
Opcija Apraksts
<id> Atceļamās darbplūsmas ID (obligāts)
Apvalks
wp queuety workflow cancel 42

Kas notiek atcelšanas brīdī

Kad darbplūsma tiek atcelta:

  • Statuss tiek mainīts uz cancelled
  • Darbību kompensācijas tiek izpildītas apgrieztā pabeigšanas secībā, ja tās pievienotas ar compensate_with()
  • Tīrīšanas apstrādātājs tiek palaists pēc darbplūsmas rindas statusa maiņas uz cancelled
  • Gaidošās darbvietas darbplūsmai tiek noglabātas nekavējoties
  • Apstrādē esošās darbvietas darbplūsmai tiek noglabātas; kad jau palaistais apstrādātājs beidz darbu, tā izvade tiek atmesta un darbplūsma neturpinās
  • Pabeigtās darbvietas no iepriekšējām darbībām paliek nemainītas
  • Tiek reģistrēts žurnāla ieraksts ar notikumu workflow_cancelled

Atcelts un neveiksmīgs

Aspekts Neveiksmīgs Atcelts
Aktivizētājs Darbība izsmēlusi atkārtošanas mēģinājumus Skaidrs cancel_workflow() izsaukums
Statuss failed cancelled
Var atkārtot Jā, izmantojot retry_workflow(), ja darbplūsmai jau nav veikta kompensācija Nē
Tīrīšanas apstrādātājs Netiek izsaukts Tiek izsaukts, ja reģistrēts ar on_cancel()
Žurnāla notikums workflow_failed workflow_cancelled

Piemērs: atcelšana ar apstiprinājumu

Bieži pirms atcelšanas tiek pārbaudīts darbplūsmas statuss:

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