Diğer

ASP.NET Core arka plan servislerinde graceful shutdown nasıl yönetilir

ASP.NET Core arka plan servislerinin uygulama kapanırken iş kaybetmeden durması için cancellation token, DI scope ve mesaj onayı gibi pratikleri ele alıyor. Yazı, kuyruk tüketicileri ve uzun süren işler için kurtarma stratejilerini de kapsıyor.

C# Corner Vivek Kumar
Yayın tarihi
Okuma süresi
10 dk okuma
agent çalıştırması #10
agent çalıştırması #10
Orijinale git c-sharpcorner.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Background servislerde stoppingToken'ı veritabanı ve HTTP çağrılarına geçirin ve iş birimleri arasında kontrol edin.
  • Her iş birimi için IServiceScopeFactory ile yeni bir scope açın; uzun ömürlü servise DbContext gibi scoped bağımlılık taşımayın.
  • Kuyruk mesajını yalnızca iş işlemi commit edildikten sonra onaylayın.
  • Yeniden teslim edilebilecek işlemler için idempotency anahtarı veya tekillik kısıtı kullanın.
  • HostOptions.ShutdownTimeout ile host bekleme süresini ayarlayın; container termination grace period değeriyle uyumlu tutun.
  • Kapanma senaryolarını aktif iş varken test edin ve gerçek broker davranışını entegrasyon testinde doğrulayın.

Bir ASP.NET Core uygulaması kapanırken arka plan işleri yarım kalabilir, bir mesaj iki kez işlenebilir ya da iş mantığı tutarsız bir duruma düşebilir. Bu yazı, BackgroundService ile yazılmış işçilerin kapanma sinyaline nasıl tepki vermesi gerektiğini ele alıyor ve uygulamanın temel ilkelerini özetliyor.

Yazının önerisi şu: CancellationToken'ı destekleyen işlemlere geçirin, her iş birimini bir DI scope içinde çalıştırın ve mesajı yalnızca iş kalıcı olarak kaydedildikten sonra onaylayın. Host kapanma süresini de HostOptions.ShutdownTimeout ile ayarlayabilirsiniz; ancak bu değer platformun sonlandırma süresini garanti etmez. Yazar ayrıca idempotency anahtarları ve yeniden deneme politikası gibi kurtarma mekanizmalarının zorunlu olduğunu vurguluyor. Ayrıntılı kod örnekleri ve test senaryoları orijinal yazıda yer alıyor.

Gerçek dünyada kullanımı

  • Sipariş kuyruğu tüketen bir worker'ın deploy sırasında yarım kalan siparişleri güvenle yeniden işlemesi.
  • Container ortamında çalışan bir rapor üretim servisinin kapanırken kontrollü şekilde durup kaldığı yerden devam etmesi.
  • Ödeme veya e-posta gönderen bir arka plan işinin tekrar teslimde çift işlem yapmasını önlemesi.

Neden önemli

Kapanma sırasında kesilen işler gerçek üretim sorunlarına yol açar; cancellation token, scope yönetimi ve idempotency birlikte uygulanmadıkça veri tutarlılığı garanti edilemez. Bu yazı, mevcut worker'larınızı gözden geçirmek için somut bir kontrol listesi sunuyor.

Bu özet, C# Corner üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü