0

Azure web işini sürekli olarak bir mantık yürütmek için kullanıyorum. Bu işlev tekil bir işlevdir. Ancak, web uygulamasının yeniden başlatılmasından sonra bu işlevi çalıştırmayı denedikten sonra "Kilit bekliyorum" iletisini alıyorum. Aynı işlevin başka bir örneğinin kilidi tuttuğu anlamına mı geliyor? Bunu nasıl çözebilirim? Azure web işi singleton işlevi kilitli

fonksiyonu:

namespace Ns 
{ 

    public class Functions 
    { 
     [Singleton] 
     [NoAutomaticTriggerAttribute] 
     public static async Task ProcessMethod() 
     { 
      while(true){ 
      //process logic here 
      await Task.Delay(TimeSpan.FromSeconds(20));} 
     } 

    } 
} 

ana program:

namespace ns 
{ 
    class Program 
    {  
     static void Main() 
     {    
      var host = new JobHost(); 
      host.RunAndBlock();    
     } 
    } 
} 

aldığım mesaj:

enter image description here

cevap

1

Singleton attribute description göre kilit işlevi sırasında adquired edilir Blob kiralama ile yürütme.

bu işlev bunun için, kilit periyodik yoklama bekler çalışan iken başka fonksiyon örneği tetiklendiğinde

. Eğer App Servis Planı birden fazla örneği varsa

, bu orada birden fazla Webjob, biri çalışırken böylece Pano diğer Webjobs kilitli durumunu gösteriyor olabilir anlamına gelir.

Depolama hesabınızda oluşturulan view the blob lease locks yapabilirsiniz.

Başka bir seçenek de Listener Singletons'u denemek ama asla Manuel tetikleyiciler ile denemedim.

+0

Aynı web işinin tüm örneklerini durdurmak mümkün mü? Ayrıca, web uygulamasını dağıtırken, eşlik eden web işleri otomatik olarak dağıtılıyor mu? Teşekkürler! – condor126

+0

Ayrıca, görüntüleyebilse bile, doğru işlev için kilidi nasıl kazanacağım? Teşekkürler! – condor126

+0

"Doğru" işleviyle ne demek istiyorsun? Kilit ve Singleton, fonksiyonun bir örneği çalışacak şekilde tasarlanmıştır, aynı işlevin diğer örnekleri kilitlenir. Ölçeklendirmeyi kısıtlamak istediğiniz işlevleri tanımlamak için kullanılır. Webjob örneklerinin miktarı, çalıştırdığınız Uygulama Hizmet Planının örneklerinin miktarına eşittir. –

0

Azure'daki üretim işlevini devre dışı bıraktım ve listenerlockPeriod'u yukarıda açıklandığı gibi 15 saniyeye ayarlıyorum. Bu, kilitleme davranışını önemli ölçüde azaltmıştır.