Aracılığıyla paylaş


.NET ile yeniden deneme ilkesi uygulama

Bulutta çalışan veya uzak hizmetlerle ve kaynaklarla iletişim kuran tüm uygulamaların geçici hataları işleyebilmesi gerekir. Bu uygulamaların bir anlık ağ bağlantısı kaybı, bir hizmet veya kaynak meşgul olduğunda istek zaman aşımı veya diğer faktörler nedeniyle hatalarla karşılaşması yaygın bir durumdur. Geliştiriciler, kararlılığı ve dayanıklılığı geliştirmek için geçici hataları şeffaf bir şekilde işlemek için uygulamalar derlemelidir.

Bu makalede, .NET için Azure Depolama istemci kitaplığını kullanarak Azure Blob Depolama bağlanan bir uygulama için yeniden deneme ilkesi ayarlamayı öğreneceksiniz. Yeniden deneme ilkeleri, uygulamanın başarısız istekleri nasıl işlediğini tanımlar ve her zaman uygulamanın iş gereksinimlerini ve hatanın niteliğini karşılayacak şekilde ayarlanmalıdır.

Yeniden deneme seçeneklerini yapılandırma

Blob Depolama için yeniden deneme ilkeleri program aracılığıyla yapılandırılır ve yeniden deneme seçeneklerinin çeşitli hizmet isteklerine ve senaryolarına nasıl uygulanacağı üzerinde denetim sağlar. Örneğin, kullanıcı etkileşimini temel alan istekler veren bir web uygulaması, yanıt hızını artırmak ve bir hata oluştuğunda kullanıcıyı bilgilendirmek için daha az yeniden deneme ve daha kısa gecikme süresine sahip bir ilke uygulayabilir. Alternatif olarak, arka planda toplu iş istekleri çalıştıran bir uygulama veya bileşen yeniden deneme sayısını artırabilir ve istek süresinin başarıyla tamamlanmasını sağlamak için üstel bir geri alma stratejisi kullanabilir.

Aşağıdaki tabloda RetryOptions sınıfının özellikleri, tür, kısa bir açıklama ve değişiklik yapmazsanız varsayılan değer listelenir. Uygulamanızın gereksinimlerini karşılamak için bu özelliklerin değerlerini ayarlama konusunda proaktif olmanız gerekir.

Özellik Türü Açıklama Default value
Delay Zaman Aralığı Sabit bir yaklaşım için yeniden deneme girişimleri arasındaki gecikme veya geri alma tabanlı bir yaklaşım için hesaplamaların temel alındığı gecikme. Hizmet bir Retry-After yanıt üst bilgisi sağlıyorsa, sonraki yeniden deneme üst bilgi değeri tarafından belirtilen süreye kadar gecikir. 0,8 saniye
MaxDelay Zaman Aralığı Hizmet bir Yeniden Deneme Sonrası yanıt üst bilgisi sağlamadığında yeniden deneme girişimleri arasındaki izin verilen en yüksek gecikme. Hizmet bir Retry-After yanıt üst bilgisi sağlıyorsa, sonraki yeniden deneme üst bilgi değeri tarafından belirtilen süreye kadar gecikir. 1 dakika
MaxRetries int Vazgeçmeden önce en fazla yeniden deneme denemesi sayısı. 5 (nota bakın)
Mod RetryMode Yeniden deneme gecikmelerini hesaplamak için kullanılacak yaklaşım. Üstel
NetworkTimeout Zaman Aralığı Tek bir ağ işlemine uygulanan zaman aşımı. 100 saniye

Not

StorageClientOptions için MaxRetries varsayılan değeri 3'ten 5'e yükseltir. Diğer tüm özellikler ile aynı varsayılan değerlere RetryOptionssahiptir.

Blob Depolama için bu kod örneğinde, BlobClientOptions sınıfının özelliğinde Retry yeniden deneme seçeneklerini yapılandırıyoruz. Ardından, yeniden deneme seçeneklerini kullanarak blob hizmeti için bir istemci nesnesi oluştururuz.

// Provide the client configuration options for connecting to Azure Blob Storage
BlobClientOptions blobOptions = new BlobClientOptions()
{
    Retry = {
        Delay = TimeSpan.FromSeconds(2),
        MaxRetries = 5,
        Mode = RetryMode.Exponential,
        MaxDelay = TimeSpan.FromSeconds(10),
        NetworkTimeout = TimeSpan.FromSeconds(100)
    },
};

BlobServiceClient blobServiceClient = new BlobServiceClient(
    accountUri,
    new DefaultAzureCredential(),
    blobOptions);

Bu örnekte, nesneden BlobServiceClient verilen her hizmet isteği, nesnede BlobClientOptions tanımlandığı gibi yeniden deneme seçeneklerini kullanır. Uygulamanızın gereksinimlerine göre hizmet istemcileri için çeşitli yeniden deneme stratejileri yapılandırabilirsiniz.

Uygulama dayanıklılığını geliştirmek için coğrafi yedekliliği kullanma

Uygulamanız hatalara karşı yüksek kullanılabilirlik ve daha fazla dayanıklılık gerektiriyorsa, yeniden deneme ilkenizin bir parçası olarak Azure Depolama coğrafi olarak yedeklilik seçeneklerinden yararlanabilirsiniz. Coğrafi olarak yedekli çoğaltma için yapılandırılan depolama hesapları, birincil bölgede zaman uyumlu olarak çoğaltılır ve zaman uyumsuz olarak yüzlerce kilometre uzaktaki ikincil bir bölgeye çoğaltılır.

Azure Depolama coğrafi olarak yedekli çoğaltma için iki seçenek sunar: Coğrafi olarak yedekli depolama (GRS) ve Coğrafi alanlar arası yedekli depolama (GZRS). Depolama hesabınız için coğrafi olarak yedekliliği etkinleştirmenin yanı sıra, ikincil bölgedeki verilere okuma erişimini de yapılandırmanız gerekir. Depolama hesabınızın çoğaltma seçeneklerini nasıl değiştireceğinizi öğrenmek için bkz . Depolama hesabının çoğaltılması şeklini değiştirme.

Bu örnekte, içinde BlobClientOptionsGeoRedundantSecondaryUri özelliğini ayarlayacağız. Bu özellik ayarlanırsa, yeniden denemeler sırasında veya HEAD istekleri için GET ikincil URI kullanılır. İkincil URI'den gelen yanıtın durumu 404 ise, istek için sonraki yeniden denemeler ikincil URI'yi yeniden kullanmaz, çünkü bu durum kodu kaynağın henüz oraya yayılmamış olabileceğini gösterir. Aksi takdirde, sonraki yeniden denemeler birincil ve ikincil URI arasında gidip gelir.

Uri secondaryAccountUri = new Uri($"https://{accountName}-secondary.blob.core.windows.net/");

// Provide the client configuration options for connecting to Azure Blob Storage
BlobClientOptions blobOptionsGRS = new BlobClientOptions()
{
    Retry = {
        Delay = TimeSpan.FromSeconds(2),
        MaxRetries = 5,
        Mode = RetryMode.Exponential,
        MaxDelay = TimeSpan.FromSeconds(10),
        NetworkTimeout = TimeSpan.FromSeconds(100)
    },

    // Set the secondary storage URI
    GeoRedundantSecondaryUri = secondaryAccountUri
};

BlobServiceClient blobServiceClient = new BlobServiceClient(
    accountUri,
    new DefaultAzureCredential(),
    blobOptionsGRS);

Coğrafi yedeklilikten yararlanan uygulamaların belirli tasarım konularını göz önünde bulundurması gerekir. Daha fazla bilgi edinmek için bkz . Yüksek oranda kullanılabilir uygulamalar tasarlamak için coğrafi yedekliliği kullanma.

Sonraki adımlar

  • Bu makale, .NET için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Uygulamanızı derleme bölümünde geliştirici kılavuzu makalelerinin tam listesine bakın.
  • Mimari rehberlik ve yeniden deneme ilkelerine yönelik genel en iyi yöntemler için bkz . Geçici hata işleme.
  • Geçici hatalar için yeniden deneme deseni uygulama yönergeleri için bkz . Yeniden deneme düzeni.