Asp.Net Core’da Hangfire Kullanarak Zamanlanmış Görevler Oluşturmak

Hangfire, Asp.Net Core uygulamalarında zamanlanmış görevleri yönetmek için kullanılan bir araçtır. Hangfire, uygulamanın arkasında çalışan bir job süreci oluşturarak, zamanlanmış görevleri güvenilir bir şekilde yürütür.

Hangfire’ı kullanmak için, öncelikle uygulamanıza Hangfire paketini yüklemeniz gerekmektedir. Bunun için, NuGet Paket Yöneticisi’ni kullanabilirsiniz. Ayrıca, Hangfire’ı kullanmak için bir veritabanı seçmeniz gerekmektedir. Hangfire, desteklediği birçok veritabanı sunucuları arasında SQL Server, PostgreSQL, MySQL, Oracle, Redis ve MongoDB’yi sayabiliriz.

Program sunucuda çalışırken arka planda belli kurallara göre ve belli zamanlarda yapılmasını istediğimiz işler için inanılmaz bir çözüm. Web arayüzü ile baya kullanışlı bir yardımcı kütüphanedir. Sahip olduğu dashboard ile job’larınızı tarihsel olarak görüntüleyebilir, start-stop/restart gibi işlemler yapabiliriz.

Öncelikle local Db’de HangFire adında bir database oluşturalım. Database’in user login bilgilerini ayarlıyoruz.

Şimdide TaskWithHangFire adında bir web api projesi açıyoruz. Nuget üzerinden bugün için en güncel olan Hangfire paketini projemize ekliyoruz.

Oluşturduğumuz database’in connection string’ini application.json dosyasına ekliyoruz.

Hangfire’ı uygulamaya tanıtmamız gerekiyor. Bu kısımda Startup.cs de bulunan ConfigureServices metodu içerisinde Hangfire’ı service olarak ekleyelim ve sonrasında Configure metodu içerisinde bu servisi kullanacağımızı belirten kod bloklarını yazıyoruz.

Yukarıdaki kod bloğunda hangfire database bilgisini vererek uygulamamız servislerine register ettik. Devamında da hangfire’ın server ve dashboard servislerini kullanacağımızı belirttik.

Hangfire dashboard default olarak uygulamanın çalıştığı portta’ http://hangfire adresinde host edilir. Bizde localhost’ta çalıştığımızdan uygulamayı run edip browser üzerinden http://localhost/hangfire adresine gittiğimizde aşağıdaki gibi hangfire dashboard’u görüntüleyebiliriz.

Uygulama start edildiğinde database’de gerekli tablolar oluşturulmuş mu ? Kontrol ediyoruz.

Hangfire konfigurasyonunu tamamladık şimdi sırasıyla Hangfire kütüphanesinde bulunan BackgroundJob sınıfını kullanarak oluşturabileceğimiz job türlerine bakacak olursak;

1- Fire-and-Forget Jobs

Job create edildikten sonra çalışır ve process olur. Bir daha da çalışmaz. Tek kullanımlık bir job’tır.

2- Delayed Jobs

Belli bir zaman bilgisi set edilerek sadece bir kez çalışmasını istediğimiz task’lar için kullanabileceğimiz job türü. Aşağıdaki gibi Job register olduktan 4 dakika sonra çalışacaktır.

3- Recurring Jobs

Job type used for recurring, ie repetitive tasks. For example; When you need a job that you want to run every hour, we can define it as follows.

4- Continuation Jobs

Parent-child ilişkisinin olduğu yani bir job’ın çalışması için başka bir job’ın tamamlanmasını bekleyip bittikten sonra çalışmasını istediğimiz işler için kullanabileceğimiz job türü.

Uygulamanızda çalıştırmanız gereken arka plan çalışmaları için Hangfire'ı hızlı bir şekilde hayata geçirebilir ve kontrol paneliyle kolayca kullanabilirsiniz. Hangfire'ın muadili olan Quartz.net veya kuyruk çözümünü kullanarak işlemlerinizi gerçekleştirebilirsiniz.

Umarım faydalı olmuştur.