Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Asp.NET Core’da Hangfire Kütüphanesi İle Zamanlanmış Görevler Oluşturma

Merhaba,

Bu içeriğimizde; Asp.NET Core uygulamalarında Background Jobs(Arka plan İşleri) gerçekleştirebilmek için bir açık kaynak kütüphanesi olan Hangfire’i inceliyor olacağız. Hangfire; çok yabancı olmadığımız ve zamanında hakkında detaylı makale yazdığımız Quartz.Net kütüphanesinin güzel bir muadilidir diyebiliriz.

Background Jobs Nedir?

Arka plan işleri olarak nitelendirilen Background Jobs aslında zamanlanmış görevlerin ta kendisidir. Bazen uygulamalarımızın ana thread dışında bir task işlemesi yahut senaryo gereği belli aralıklarla belli işlemlerin gerçekleştirilmesi gerekebilmektedir. İşte bu tarz ihtiyaçlara istinaden gerçekleştirilen zamanlanmış görevleri background jobs diyerek tarif etmekteyiz.

Hangfire’ın Avantajları Nelerdir?

Hangfire Nasıl Çalışır? Mimarisi Nasıldır?


Hangfire; clienttan alınan görevleri “Hangfire Job Storage(Hangfire İş Deposu)” isimli alanda depolayarak sıraya alır. Server tarafından ilgili depodaki işler sırasıyla tek tek alınarak arka planda işlenir ve sonuç olarak clienta haber gönderir.

Projeye Hangfire Entegrasyonu

Asp.NET Core projesine Hangfire’ı entegre edebilmek için ilgili projenin ana dizinine odaklanmış powershell ekranında aşağıdaki komutu çalıştırmanız yeterli olacaktır.

dotnet add package Hangfire

Bu işlemden sonra Hangfire kütüphanesi projeye entegre edilmiş olacaktır.

Hangfire Kurulumu

Entegre ettiğimiz Hangfire kütüphanesini Asp.NET Core projesinde aktif hale getirebilmek için ilk olarak Hangfire’ın kullanacağı veritanını oluşturmamız gerekmektedir.

Hangfire; arka planda gerçekleşecek olan işleri sıralı bir şekilde kayda almak ve sonuçlarını takip edebilmek için fiziksel olarak bu veritabanını kullanacaktır. Uygulama ilk ayağa kalktığında Hangfire yapılanması ilgili veritabanında kendisine ait tabloların var olup olmadığını check etmekte, eğer yoksa anında migrate etmektedir. Evet, zaten birazdan bu durumuda gözlemleyeceğiz 🙂

Sıra veritabanı providerını “appsettings.json” dosyasına eklemeye geldi.

{
  "ConnectionString": "Server=.;Database=HangfireDB;Trusted_Connection=True;"
}

Bu işlemden sonra Hangfire kütüphanesini servis olarak uygulamaya dahil etmek ve nimetlerinden faydalanabilmek için “Startup.cs” dosyasında aşağıdaki çalışmaları gerçekleştirelim.

    public class Startup
    {
        public IConfiguration Configuration { get; set; }
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddHangfire(_ => _.UseSqlServerStorage(Configuration.GetValue<string>("ConnectionString")));
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
                app.UseDeveloperExceptionPage();

            app.UseHangfireDashboard();
            app.UseHangfireServer();

            app.UseMvc(_ => _.MapRoute(
                name: "Default",
                template: "{controller=Home}/{action=Index}/{id?}"
                ));
        }
    }

Yukarıdaki kod bloğunu incelerseniz eğer;
“ConfigureServices” metodunda “AddHangfire” fonksiyonu ile Hangfire kütüphanesinin kullanacağı SQL Server Storage’ini belirlemekteyiz. “Configure” metodunda ise “UseHangfireDashboard” ve “UseHangfireServer” middlewarelerini devreye sokarak Hangfire kütüphanesinin Dashboard özelliğiyle birlikte Hangfire Server’ı uygulamada kullanılabilir hale getiriyoruz.

Hangfire dashboard’unda neler var? sorunuzu duyar gibiyim… Bir kaç satır sonra dashboard yapısını inceleyeceğiz lakin şimdi bu noktaya kadar yaptığımız çalışmayı ayağa kaldırarak Hangfire kütüphanesinin tablolarının migrate edildiğini ve temel yapılanmasının sıkıntısız aktifleştirildiğini göstermek istiyorum.

Yukarıdaki ekran görüntüsünde olduğu gibi Hangfire yapacağı işleri fiziksel olarak tutacağı tüm veritabanı yapılanmasını otomatik migrate etmiş bulunmaktadır. Burada önceki satırlarda bahsettiğim durumu tekrarlamak istiyorum ki; ilgili tablolar silindiği taktirde bir sonraki uygulamanın ayağa kalkması durumunda, check sonucunda tekrardan migrate edileceklerdir.

Hangfire Dashboard Yapısı

Görev Oluşturma

Hangfire ile dört farklı aksiyonda görev oluşturulabilmektedir. Şimdi gelin bu aksiyonları tek tek inceleyelim;

Evet… Bu noktadan itibaren Asp.NET Core uygulamalarında zamanlanmış görevlerin Hangfire ile tam teferruatlı nasıl gerçekleştirilebileceğini incelemiş bulunmaktayız. İlgilenenlerin faydalanması dileğiyle…

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Exit mobile version