Munkafolyamat megszakítása
A munkafolyamatok programozottan vagy a(z) CLI segítségével szakíthatók meg. Megszakításkor a(z) Queuety a(z) cancelled értékre állítja az állapotát, eltemeti a függőben lévő vagy feldolgozás alatt álló feladatokat, és futtat egy választható takarító kezelőt.
Regisztrációs takarító kezelő
Használja a on_cancel() metódust a munkafolyamat-építőn egy olyan osztály regisztrálásához, amely a munkafolyamat megszakításakor fut le. A kezelőosztálynak implementálnia kell egy handle( array $state ): void metódust.
use Queuety\Queuety;
Queuety::workflow( 'import_data' )
->then( FetchDataHandler::class )
->then( TransformDataHandler::class )
->then( LoadDataHandler::class )
->on_cancel( ImportCleanupHandler::class )
->dispatch( [ 'source_url' => $url ] );
A takarító kezelő megkapja a munkafolyamat nyilvános állapotát (az összes olyan kulcsot, amely nem _ kezdetű):
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.'
);
}
}
Megszakítás a PHP használatával
Hívja meg a Queuety::cancel_workflow() metódust a munkafolyamat azonosítójával:
Queuety::cancel_workflow( $workflow_id );
Ez a metódus:
- Zárolja a munkafolyamat sorát
- Beállítja a munkafolyamat állapotát erre:
cancelled - Eltemeti a munkafolyamathoz tartozó összes függőben lévő és feldolgozás alatt álló feladatot a "Workflow cancelled" üzenettel
- Naplóz egy
workflow_cancelledeseményt, majd véglegesíti a tranzakciót - Fordított sorrendben futtatja a befejezett lépések kompenzációit (ha a
compensate_with()használatával regisztráltak ilyet) - Futtatja a
on_canceltakarító kezelőt (ha regisztráltak ilyet)
RuntimeException kivétel keletkezik, ha a munkafolyamat már completed vagy cancelled állapotú.
Megszakítás a CLI használatával
wp queuety workflow cancel <id>
| Beállítás | Leírás |
|---|---|
<id> |
Megszakítandó munkafolyamat-azonosító (kötelező) |
wp queuety workflow cancel 42
Mi történik megszakításkor
Amikor egy munkafolyamatot megszakítanak:
- Állapot:
cancelledértékre változik - Lépéskompenzációk: fordított befejezési sorrendben futnak le, ha a
compensate_with()segítségével csatolta őket - Takarító kezelő: a munkafolyamat
cancelledállapotúra jelölése után fut le - Függőben lévő feladatok: a munkafolyamathoz tartozók azonnal eltemetésre kerülnek
- Feldolgozás alatt álló feladatok: a munkafolyamathoz tartozók eltemetésre kerülnek; a folyamatban lévő kezelő befejezésekor a kimenete eldobásra kerül, és a munkafolyamat nem lép tovább
- Befejezett feladatok: a korábbi lépések feladatai változatlanok maradnak
- Naplóbejegyzés:
workflow_cancelledeseménnyel kerül rögzítésre
Megszakítva vagy sikertelenül
| Szempont | Sikertelen | Megszakítva |
|---|---|---|
| Kiváltó ok | Egy lépés kimeríti az újrapróbálkozási kísérleteit | A cancel_workflow() kifejezett meghívása |
| Állapot | failed |
cancelled |
| Újrapróbálható | Igen, a retry_workflow() segítségével, kivéve, ha a munkafolyamatot már kompenzálták |
Nem |
| Takarító kezelő | Nem fut le | Lefut, ha a on_cancel() segítségével regisztrálták |
| Naplóesemény | workflow_failed |
workflow_cancelled |
Példa: megszakítás megerősítéssel
Gyakori minta, hogy megszakítás előtt ellenőrzi a munkafolyamat állapotát:
$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 );
}