Aracılığıyla paylaş


Ö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 hangi eylemi gerçekleştirmesi gerektiğini 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ışı hizmeti örneğini kilitlemeye çalıştığında bu özel durumu alır. Bu özelliğin değerleri , BasicRetryve AggressiveRetrydeğerleridirNoRetry. NoRetry varsayılan değerdir. Aşağıdaki listede üç seçenek açıklanmaktadır:

  • NoRetry. Hizmet ana bilgisayarı iş akışı hizmeti örneğini kilitlemeyi denemez 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 . NoRetry varsayılan değerdir.

  • 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 sonundaki çağırana geçirir InstanceLockedException . İş akışınız yaklaşık 5-60 saniye arasında bellekte kalırsa ve iletiler aynı konakta 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şler 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, örnekler üzerindeki 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 ana bilgisayarı olan 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 getirildiğini varsayalım. Kapatma, iş akışı hizmeti örnekleri boşta kalana kadar bekler ve ardından örnekleri kalıcı hale gelip kaldırır. Yeni AppDomain'deki konakların bir örneği kilitleme girişimleri bir InstanceLockedExceptionneden olur.

  2. Dayanıklı iş akışlarını homojen bir sunucu grubunda yatay olarak ölçeklendirme. Üzerinde 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. Grubunun 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 çalışır ve InstanceLockedExceptionalı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 grubunda yatay olarak ölçeklendirme. Bir NLB'nin (Ağ Load Balancer) 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ışı ana bilgisayarı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.