Örnek Kilitli Özel Durum Eylemi

InstanceLockedExceptionAction SQL İş Akışı Örnek Deposu özelliği, SQL kalıcılık sağlayıcısının bir InstanceLockedExceptionaldığında gerçekleştirmesi gereken eylemi belirtmenize olanak tanır. Kalıcılık sağlayıcısı, şu anda başka bir hizmet konağı tarafından kilitlenmiş bir iş akışı hizmet örneğini kilitlemeye çalıştığında bu özel durumu alır. Bu özelliğin değerleri , BasicRetryve AggressiveRetryşeklindedirNoRetry. Varsayılan değer NoRetry değeridir. Aşağıdaki listede üç seçenek açıklanmaktadır:

  • NoRetry. Hizmet konağı iş akışı hizmet örneğini kilitlemeye çalışmaz ve öğesini çağırana geçirir InstanceLockedException . İş akışınız 60 saniyeyi aşan bir süre boyunca bellekte kalırsa yeniden deneme olarak kullanın NoRetry . Varsayılan değer NoRetry değeridir.

  • BasicRetry. Hizmet ana bilgisayarı, yeniden deneme girişimleri arasındaki doğrusal bir aralıkla iş akışı hizmet örneğini kilitlemeyi yeniden dener ve öğesini sıranın sonunda çağırana geçirir InstanceLockedException . İş akışınız yaklaşık 5-60 saniye arasında bellekte kalıyorsa ve iletiler aynı konaktaki aynı örneğe gönderilen iletilerin iş akışını kaldırmadan önce tüm iletileri işleme olasılığının daha yüksek olduğu toplu işlemler halinde geliyorsa, kaynakları boşa harcamadan en iyi gecikme süresini elde etmek için kullanın BasicRetry .

  • AggressiveRetry. Hizmet ana bilgisayarı, yeniden deneme girişimleri arasında üstel geri alma aralığıyla iş akışı hizmet örneğini kilitlemeyi yeniden dener ve özel durumu sıranın sonunda çağırana geçirir. İş akışınız çok kısa bir süre (5 saniyeden kısa) bellekte kalıyorsa veya bir Web grubu büyükse ve aynı konağa başka bir ileti teslim edilme olasılığı çok yüksek değilse, en iyi gecikme süresini elde etmek için kullanın AggressiveRetry .

Örnek Kilitli Özel Durum Eylemi özelliği aşağıdaki senaryoları destekler. Tüm senaryolarda, SqlWorkflowInstanceStore'nun instanceLockedExceptionAction özelliği veya AggressiveRetryolarak ayarlanırsa BasicRetry konak, örneklerdeki kilidi düzenli aralıklarla almak için saydam olarak yeniden denenir.

  1. Uygulama etki alanlarının düzgün bir şekilde kapatılmasını ve çakışan geri dönüşümünün etkinleştirilmesi. İş akışı hizmeti örneklerini çalıştıran bir hizmet konağına sahip bir AppDomain'in geri dönüştürülmekte olduğunu ve eski AppDomain düzgün bir şekilde indirilirken yeni istekleri paralel olarak işlemek için yeni bir AppDomain'in getirildiğini varsayalım. Kapatma, iş akışı hizmeti örnekleri boşta kalana kadar bekler ve ardından kalıcı olur ve örnekleri kaldırır. Yeni AppDomain'deki konakların bir örneği kilitlemeye yönelik tüm girişimleri bir InstanceLockedException'a neden olur.

  2. Dayanıklı iş akışlarını homojen bir sunucu grubu genelinde yatay olarak ölçeklendirme. Bir iş akışı örneğinin çalıştığı sunucu grubunun düğümünün kilitlenmeleri ve iş akışı ana bilgisayarının çalıştırdığı örnekteki kilitleri kaldıramadığını varsayalım. Grubun başka bir düğümünde çalışan bir hizmet konağı söz konusu iş akışı örneği için bir ileti aldığında, bu örneklerde kilitleri almaya InstanceLockedExceptionçalışır ve alır. Kilidi yenilemesi gereken konak artık mevcut olmadığından kilitlerin süresi bir süre sonra dolacak.

    Dayanıklı iş akışlarını homojen bir sunucu grubu genelinde yatay olarak ölçeklendirme. Bir NLB'nin (Ağ Yük Dengeleyici) arkasında birden çok ana bilgisayar kullanarak dayanıklı bir iş akışını yatay olarak ölçeklendirmek istediğinizi, grubun bir düğümünde çalışan iş akışı konağının bir iş akışı örneği yükleyip bir iletiyi işlediğini ve NLB'nin zaten örneği çalıştıran konağa ileti teslim etmek için yönlendirme algoritması olmadığından örneğe yönelik sonraki iletinin başka bir düğümde çalışan konağa yönlendirildiğini varsayalım. İletiyi aldıktan sonra, ikinci konak iş akışı örneğini yüklemeyi dener ve ilk konağın örnekte bir kilidi olduğundan öğesini alır InstanceLockedException . İlk konak, ilk iletiyi işlemeyi bitirdiğinde örneğin kilidini açar ve ikinci konak bir sonraki denemede kilidi alır, örneği yükler ve ikinci iletiyi işler.