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:
- Bloķē darbplūsmas rindu
- Iestata darbplūsmas statusu uz
cancelled - Noglabā visas gaidošās un apstrādē esošās darbplūsmas darbvietas ar ziņojumu "Workflow cancelled"
- Reģistrē
workflow_cancellednotikumu un apstiprina izmaiņas - Apgrieztā secībā palaiž pabeigto darbību kompensācijas (ja tādas reģistrētas, izmantojot
compensate_with()) - Palaiž
on_canceltī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 );
}