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.
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.