İş Akışını İptal Etme
İş akışları program aracılığıyla veya CLI üzerinden iptal edilebilir. Bir iş akışı iptal edildiğinde Queuety durumunu cancelled olarak ayarlar, bekleyen veya işlenmekte olan tüm işleri kuyruğun dışına alır ve isteğe bağlı bir temizleme işleyicisi çalıştırır.
Temizleme işleyicisi kaydetme
İş akışı oluşturucusunda on_cancel() kullanarak iş akışı iptal edildiğinde çalışacak bir sınıf kaydedin. İşleyici sınıfı bir handle( array $state ): void yöntemi uygulamalıdır.
use Queuety\Queuety;
Queuety::workflow( 'import_data' )
->then( FetchDataHandler::class )
->then( TransformDataHandler::class )
->then( LoadDataHandler::class )
->on_cancel( ImportCleanupHandler::class )
->dispatch( [ 'source_url' => $url ] );
Temizleme işleyicisi, genel iş akışı durumunu alır (_ ile başlamayan tüm anahtarlar):
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.'
);
}
}
PHP üzerinden iptal etme
İş akışı kimliğiyle Queuety::cancel_workflow() çağrısı yapın:
Queuety::cancel_workflow( $workflow_id );
Bu yöntem:
- İş akışı satırını kilitler
- İş akışı durumunu
cancelledolarak ayarlar - İş akışına ait bekleyen ve işlenmekte olan tüm işleri "Workflow cancelled" ile kuyruğun dışına alır
- Bir
workflow_cancelledolayı kaydeder ve işlemi tamamlar - Tamamlanan adımların telafilerini ters sırada çalıştırır (varsa,
compensate_with()üzerinden kaydedilmiş olanları) on_canceltemizleme işleyicisini çalıştırır (kayıtlıysa)
İş akışı zaten completed veya cancelled durumundaysa RuntimeException fırlatılır.
CLI üzerinden iptal etme
wp queuety workflow cancel <id>
| Seçenek | Açıklama |
|---|---|
<id> |
İptal edilecek iş akışı kimliği (gerekli) |
wp queuety workflow cancel 42
İptal edildiğinde ne olur
Bir iş akışı iptal edildiğinde:
- Durum
cancelledolarak değişir - Adım telafileri,
compensate_with()ile eklendiyse tamamlanma sırasının tersine çalışır - Temizleme işleyicisi, iş akışı satırı
cancelledolarak işaretlendikten sonra çalışır - İş akışına ait bekleyen işler hemen kuyruğun dışına alınır
- İş akışına ait işlenmekte olan işler kuyruğun dışına alınır; devam eden işleyici tamamlandığında çıktısı atılır ve iş akışı ilerlemez
- Önceki adımlara ait tamamlanmış işler olduğu gibi bırakılır
workflow_cancelledolayı içeren bir günlük kaydı oluşturulur
İptal edildi ve Başarısız oldu durumları
| Özellik | Başarısız | İptal edildi |
|---|---|---|
| Tetikleyici | Bir adım yeniden deneme hakkını tüketir | cancel_workflow() için açık çağrı |
| Durum | failed |
cancelled |
| Yeniden denenebilir mi | Evet, iş akışına telafi uygulanmadıysa retry_workflow() üzerinden |
Hayır |
| Temizleme işleyicisi | Çağrılmaz | on_cancel() üzerinden kaydedildiyse çağrılır |
| Günlük olayı | workflow_failed |
workflow_cancelled |
Örnek: onayla iptal etme
Yaygın bir örüntü, iptal etmeden önce iş akışı durumunu kontrol etmektir:
$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 );
}