İçeriğe geç

İş Akışı Telafisi

Telafi, tamamlanmış bir iş akışı adımına geri alma işleyicisi eklemenizi sağlar. Queuety, adım tamamlandığında genel durumun anlık görüntüsünü saklar; ardından iş akışı iptal edildiğinde veya isteğe bağlı olarak başarısız olduğunda telafi işleyicilerini ters sırada çalıştırır.

compensate_with() yöntemi

Geri alınması gereken adımdan hemen sonra compensate_with() çağrısı yapın:

PHP
use Queuety\Queuety;

Queuety::workflow( 'provision_account' )
    ->then( CreateRemoteUserStep::class )
    ->compensate_with( DeleteRemoteUserCompensation::class )
    ->then( CreateSubscriptionStep::class )
    ->compensate_with( CancelSubscriptionCompensation::class )
    ->then( SendWelcomeEmailStep::class )
    ->dispatch( [ 'user_id' => 42 ] );

İş akışı daha sonra iptal edilirse Queuety çalışır:

  1. CancelSubscriptionCompensation
  2. DeleteRemoteUserCompensation

Telafi işleyicileri

Telafi işleyicileri Contracts\Compensation arayüzünü uygular:

PHP
use Queuety\Contracts\Compensation;

final class DeleteRemoteUserCompensation implements Compensation {
    public function handle( array $state ): void {
        remote_api_delete_user( $state['remote_user_id'] );
    }
}

İşleyici, telafi uygulanan adım tamamlandıktan hemen sonraki genel iş akışı durumunu alır. Ayrılmış dahili anahtarlar dahil edilmez.

İptal ve başarısızlık

Açıkça iptal edildiğinde, tamamlanmış adımların telafileri isteğe bağlı on_cancel() işleyicisinden önce her zaman çalışır.

Başarısızlık durumunda telafiler yalnızca etkinleştirmeniz halinde çalışır:

PHP
Queuety::workflow( 'provision_account' )
    ->then( CreateRemoteUserStep::class )
    ->compensate_with( DeleteRemoteUserCompensation::class )
    ->then( CreateSubscriptionStep::class )
    ->compensate_with( CancelSubscriptionCompensation::class )
    ->then( ChargeCardStep::class )
    ->compensate_on_failure()
    ->dispatch( $payload );

compensate_on_failure() olmadan başarısız bir iş akışı, tamamlanmış adımların geçmişini korur ve başarısız adımdan yeniden denenebilir.

compensate_on_failure() kullanıldığında, tamamlanmış adımların telafileri iş akışı başarısız olarak işaretlendikten sonra çalışır. Bunun ardından iş akışına zaten telafi uygulandığından retry_workflow() bir hata fırlatır.

Desteklenen adım türleri

Telafi şu adımlara eklenebilir:

  • sıralı then() adımları
  • parallel() grupları
  • for_each() adımları
  • run_workflow() adımları
  • delay() gecikme adımları
  • wait_for_signal() sinyal adımları
  • wait_for_workflow() iş akışı bağımlılığı adımları

run_workflow() ve for_each() için telafi anlık görüntüsü, iç içe geçmiş veya dallanmış işler tamamen sonuçlandıktan sonra kaydedilir.

on_cancel() ile telafi karşılaştırması

Tamamlanmış adımların yan etkilerini ters sırada geri almak için compensate_with() kullanın.

İş akışı açıkça iptal edildiğinde çalışması gereken iş akışı düzeyinde tek bir temizleme kancası için on_cancel() kullanın.