İçeriğe geç

İş 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.

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

Temizleme işleyicisi, genel iş akışı durumunu alır (_ ile başlamayan tüm anahtarlar):

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

PHP üzerinden iptal etme

İş akışı kimliğiyle Queuety::cancel_workflow() çağrısı yapın:

PHP
Queuety::cancel_workflow( $workflow_id );

Bu yöntem:

  1. İş akışı satırını kilitler
  2. İş akışı durumunu cancelled olarak ayarlar
  3. İş akışına ait bekleyen ve işlenmekte olan tüm işleri "Workflow cancelled" ile kuyruğun dışına alır
  4. Bir workflow_cancelled olayı kaydeder ve işlemi tamamlar
  5. Tamamlanan adımların telafilerini ters sırada çalıştırır (varsa, compensate_with() üzerinden kaydedilmiş olanları)
  6. on_cancel temizleme işleyicisini çalıştırır (kayıtlıysa)

İş akışı zaten completed veya cancelled durumundaysa RuntimeException fırlatılır.

CLI üzerinden iptal etme

Kabuk
wp queuety workflow cancel <id>
Seçenek Açıklama
<id> İptal edilecek iş akışı kimliği (gerekli)
Kabuk
wp queuety workflow cancel 42

İptal edildiğinde ne olur

Bir iş akışı iptal edildiğinde:

  • Durum cancelled olarak 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ı cancelled olarak 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_cancelled olayı 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:

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