İş 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:
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:
CancelSubscriptionCompensationDeleteRemoteUserCompensation
Telafi işleyicileri
Telafi işleyicileri Contracts\Compensation arayüzünü uygular:
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:
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.