.Net 6.0 Background Service

Bu gönderide background servislere giriş yapacağız, nedir, nasıl çalışır, hangi amaçlarla kullanıldığını ve.net 7.0 ile nasıl kullanılacağını inceleyip proje yapacağız.

Background Servisler Nedir?

Background Service IHostedService‘den miras alınmış asenkron şeklinde çalışabilen, ayrı bir worker olarak çalışmasına karşın .net core web uygulaması içinde de çalışabilir.

Kullanım Alanları
  • Arkaplanda asenkron olarak çalışarak, kaynaklarımızı düzgün paylaştırma imkanı vermesi.
  • Rabbitmq, kafka gibi mesaj broker implematasyonu ile asenkron iletişim sağlaması.
  • Günlük, aylık gibi çalışması gereken süreçleri yönetebilme kolaylığı sağlaması.

Faydalı Kütüphaneler

Aşağıdaki kütüphaneler background joblarınızı yönetmenizde büyük kolaylık sağlıyor fakat basit uygulamalarınız için ise gereksiz yük olabileceğinden dotnet’in kendi servisini kullanmak daha faydalı olacaktır.

  • Hangfire
  • Quartz

Örnek proje üzerinden nasıl implement edilir ona bakacağız, ardından da CancellationToken ve HostedService tabanlı bir inceleme yapacağız.

Proje (Nasıl İmplement edilir)

.Net 5.0, 6.0,7.0 sürümlerinden herhangi birine uygulayabilirsiniz. Ben .net 7.0 ile projeyi oluşturacağım. Web api uygulaması olacak, içine birden çok servis ekleyebileceğiz ilk olarak service nasıl kaydettiğimize ve çalışma mantığına bakalım.

Kullan at tek seferlik servis :

Program.cs’ye hostedservice olarak kaydedelim.

Ayrıca aşağıdaki şekilde de kaydedilebilir.

Service:

StopAsync() BackgroundService class’ın bir üyesi bu metod ile servisi durdurabiliyoruz.

Cancelletion token uygulamamız çalışırken kapanması, taskin iptal edilmesi gibi process durdurulma durumlarında service’deki işlemi de durduracak bir işlem türüdür. Örneğin uygulama çalışırken konsoldan ctrl c ile shıtdown yapabilirsiniz.

Zaman bazlı çalıştırabilme (Cron )

Background jobların en çok işe yaradığı nokta planlı işlerimizi çalıştırabilmeye imkan verebilmesidir. Örneğin günde 1 kez, her ayın 15’inde, 10 dakika da bir gibi çalışabilmesi.

Cron Job Örnekleri

5 alandan oluşur eğer ki 6 hane olursa ilk ifade saniyeyi temsil eder.

* * * ? * *Her saniye
0 */10 * ? * *10 dakikada bir
0 0 * ? * *Her saat
0 0 1 * * ?Her gün gece 1
0 0 12 1 * ?Her ayın 1’i gece 12
Zaman Bazlı Çalıştırılabilen Joblar (Schedule Job)

Web api projesi içine ayarladığımız cron ifadesine göre çalışacak örnek bir service yazalım.

Yukarıdaki cron ifadesi her 5 saniyede bir çalışacak anlamına gelir ayrıca bu expression’ı çözümlemek için aşağıdaki paketi yükleyebilirsiniz.

Elle durdurma ve çalıştırma

Uygulama ilk ayağa kalktığı anda servislerimiz çalışmaya başlar fakat sonsuz bir döngüde devam edebilir. Bu sebeple ve bazen koşullara göre bu servisleri durdurma ihtiyaçlarımız olabilir. Endpoint üzerinden istek atarak servisi durdurmayı deneyelim.

Öncelikle servisimizin bir instance’ını oluşturup sonra o instance ile injection yapmamız gerekiyor.

Api:

Bu halde api’ye istek atarsak throw exception ile uygulamanın tamamı duracaktır bu yüzden için ilgili servisin execute metodunu try catch blokları içine alıp hatayı yakalayalım.

TaskCanceledException hatası StopAsync çağırma durumumuz da yakalancaktır böylece uygulamamız tamamen kapanmayıp loglara kayıt atacaktır.

Github : okankrdg/BackgroundServices (github.com)

Başka bir yazıda görüşmek üzere esen kalın.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Turkish