NTT DATA Business Solutions
Honey Badgers | Ağustos 11, 2020

Hangfire Nedir? .NET Core 3.x Üzerinde Kullanımı

Hangfire Nedir?

Hangfire, arkaplanda çalışacak olan bazı işleri yaratıp, yürütmeyi ve yönetmeyi sağlayan açık kaynaklı bir kütüphanedir.

Neden Hangfire Kullanmalısınız?

İş akış sürecinizde bazen bazı işlerin arka planda gerçekleşmesi gerektiği durumlar olabilir veya haftalık, günlük olarak belli zaman aralıklarında bir işlemi tekrar edecek şekilde yaptırmak isteyebilirsiniz. Örneğin: haftalık bülten abonesi olmuş kullanıcılara belirleyeceğiniz belli bir günde e-mail atmak gibi yineleyen işlemler bu kapsamda değerlendirilebilir.

Hangfire kullanmanın faydaları nelerdir?

  1. Kendi içerisinde sunmuş olduğu dashboard sayesinde, daha kolay yönetilebilir ve görünürlük sağlar.
  2. Uygulamanızdan bağımsız bir şekilde çalışabilir.
  3. Yapmış olduğu her bir işin bilgisini veri tabanında tuttuğu için bir bütünlük sağlar, ayrıca herhangi bir sorun olması halinde tekrar tekrar denemeyi sağlar.

Hangfire’a Alternatif Kütüphaneler

Hangfire’a alternatif olabilecek kütüphanelerden bazılarını aşağıda görebilirsiniz.

  • RabbitMQ
  • Azure Functions
  • NServiceBus
  • Kafka
  • Sidekiq

Hangfire Job Çeşitleri

  1. Fire & Forget: Bir kez ve anında çalışacak olan job çeşididir.
  2. Delayed: Belirtilen sürenin sonunda bir defaya mahsus çalışacak olan job çeşididir.
  3. Recurring: Recursive olarak devamlı çalışacak olan job çeşididir.
  4. Continuations: Daha önceden tanımlanmış olan job’ın (scheduled) başarılı şekilde çalışması durumunda çalışacak olan job çeşididir.

.NET Core 3.x Üzerinde Hangfire Kurulumu & Kullanımı

Öncelikle hızlıca .NET Core API projemizi oluşturalım. Ardından proje üzerinde sağ tıklayıp, “Manage Nuget Packages…” bölümüne tıklayalım ve açılan bölüm içerisinde Browse sekmesinden Hangfire’ı arattıralım. Aşağıdaki gibi bir görsel ile karşılaşacağız, “Install” butonuna tıklayarak kuralım.

 

Hangfire

 

Hangfire kurulduktan sonra, proje içerisindeki “Startup.cs” dosyasına gidip aşağıdaki kodları ekleyelim.

services.AddHangfire(x =>

x.UseSqlServerStorage(“Server=.;Database=HangfireDemo;Trusted_Connection=

True;MultipleActiveResultSets=true”));

services.AddHangfireServer();

 

NOT: Yukarıda görmüş olduğunuz kod satırları içerisinde veritabanı bağlantısı için connection string belirttik. Bunun sebebi; Hangfire tüm işlemlerin bütünlüğünü sağlamak adına kendi veritabanını oluşturup, oradan yönetimini sağlamakta. Bu sayede projeniz düştüğünde veya herhangi bir olumsuz durumda job’larınız kaybolmamakta, kalıcılığı (persistent) sağlanmakta.

Ardından aynı dosya içerisinde “Configure” altına, Hangfire’ın bize sunmuş olduğu görsel panelini kullanabilmemiz için aşağıdaki kodu da ekleyelim.

app.UseHangfireDashboard();

 

Öyleyse “Run” butonuna basıp neler oluyor bir görelim. İlk başta başlangıç URL’i ne ise oradan başlayacaktır. Bu yüzden URL’e “../hangfire” yazıp Hangfire’ın dashboard’ına bağlanabiliriz. Şöyle ki:

 

 

Hangfire

 

Bu ekranı gördükten sonra test olarak bir controller ekleyelim ve içerisine ilk olarak test edeceğimiz fire & forget job’ıyla ilgili kodları ekleyelim:

Hangfire

 

BackgroundJob.Enqueue(..); satırı ile kullanıcı sisteme kayıt olduktan sonra bir defaya mahsus olarak çalışacak olan bir job oluşturup, tetiklenecek fonksiyonu belirtiyorum. Bu sayede arka planda bir job oluşturup asenkron olarak bağımsız çalıştırmış oluruz. Sign up süresi de uzamamış olur.

Postman üzerinden aşağıdaki şekilde endpoint’e istekte bulunarak test edebilirsiniz.

Hangfire

 

Delayed job, job oluşturulduktan belirli bir süre sonra tetiklenen ve çalışan bir job çeşididir. Aşağıdaki örnekte 30 sn sonra çalışan bir delayed job ‘a ait örnek kod satırını görebilirsiniz.

 

Hangfire

 

Marketing e-maili’nin her hafta pazartesi günü saat 09:30’da gönderilmesi için oluşturduğumuz recurring job örnek kod satırı aşağıdadır.

Hangfire

 

Bu sefer oluşturmuş olduğumuz job, “Jobs” sekmesi altında değil “Recurring Jobs” altında gözükecektir. Ayrıca job’ın üzerine tıklayarak detaylı bilgisi görüntülenebilir.

Hangfire

 

Job’ı manuel olarak test etme amaçlı, direkt “Trigger now” butonuna tıklayarak çalıştırabilirsiniz.

“jobs” sekmesi altındaki “succeeded” alanında başarılı job’lar görüntülenebilir.

Ayrıca Pazar günü bu yazıyı yazdığım için yukarıdaki görselde “Next execution” sütununda bir gün sonra yazıyor. Not olarak ekleyeyim, karışıklık olmasın dedim J.

Bu yazıda son olarak anlatacağım bir diğer job tipi ise “Continuations” job’ı. Hatırlayacağınız üzere bir job’ın başarılı olarak çalıştırılıp bitirilmesine bağlı olarak başka bir job’ı oluşturabiliyorduk. Buna göre aşağıdaki görselde nasıl oluşturmuşuz bir göz atalım:

 

Hangfire

 

Bağlayacağımız job’ın id’sini bir değişkene atıp, parametre olarak ContinueJobWith(); fonksiyonuna geçiyoruz. Böylelikle zincir şeklinde başarı durumuna göre başka bir job oluşturmuş olduk.

 

Hangfire hakkında daha detaylı bilgi için https://www.hangfire.io/ adresini ziyaret edebilirsiniz. Umarım sizler için başlangıç olması açısından güzel bir yazı olmuştur.