.Net Core Hangfire Kullanımı

.Net Core Hangfire Kullanımı

umutduran

21 Tem, 2020 07:38

umutduran

Merhaba arkadaşlar,

Bu gün sizlere tanımlı görevleri yaptırabileceğiniz bir eklentiden bahsedeceğim. Adı Hangfire olan bu eklentinin kendi dashboardı bile var ve gerçek zamanlı olarak sunucu üzerinden kontrol edebiliyorsunuz. Peki bu nerede işimize yarar derseniz, örneğin bir uygulama yaptınız ve günde 10 mail atması gerekiyor otomatik olarak. Siz bu 10 maili her gün panele girip bir butona basarakta attırabilirsiniz. Fakat Hangfire sayesinde web uygulamanız bunu her gün aynı saatte kendisi tekrarlayabilir.

Şimdi öncelikle aşağıdaki fotoğrafta bulunan eklentileri nuget ile kuruyoruz.

Hangfire database kullanmaya ihtiyaç duyan bir eklenti olduğu için ayarlarda bunun db yolunu veriyoruz. Bu hali hazırda sitenizin kullandığı db olabilir yada yeni bir db açıp yolunu verebilirsiniz. Siz appsettings.json dosyasında tanımladığınız connectionstrings'inizi aşağıdaki gibi hangfire'ın kullanımına açabilirsiniz.

Startup.cs

services.AddHangfire(x => x.UseSqlServerStorage(Configuration.GetConnectionString("hangfiredb")));
services.AddHangfireServer();

Projeyi çalıştırdığımız zaman Hangfire kendisi db kurulumunu yapacak ve çalışacaktır. Sizin bir işlem yapmanıza gerek yok. Sonra ise kendimize görevler diye bir klasör açıyoruz. Bu görevler olur, her şey olabilir. Klasör ismi tamamen size kalmış. Sonra bunun içerisinde bir class dosyası açıyoruz. Benim dosyamın adı HGReset.cs diyelim.

HGReset.cs

public class HGReset 
    {
        private readonly dbContext _context;

        public HGReset(dbContext context)
        {
            _context = context;
        }

        public async Task HaftalikGosterimSifirla()
        {
            var yazilar = _context.dbkolon.ToList();

            foreach (var item in yazilar)
            {
                item.HaftalikTiklanma = 0;

                _context.Update(item);
            }

            await _context.SaveChangesAsync();
        }

    }

Yukarıdaki şekilde bir class oluşturdum. Burada blogumda sağda ki haftalık gösterimleri her hafta pazartesi günü sıfırlayabileceğim bir görev oluşturuyorum. 

Startup.cs

RecurringJob.AddOrUpdate<HGReset>(nameof(HGReset), j => j.HaftalikGosterimSifirla(), "00 00 * * 1", TimeZoneInfo.Local);

Daha sonra Startup.cs dosyamın içerisinde yazdığım görevi çağırıyorum. Artık projem ayağa kalktıktan itibaren görevim düzenli olarak çalışacaktır.

Peki Hangfire Darshboard'a nasıl ulaşabiliriz ?

Öncelikle Filter adında bir klasör oluşturuyoruz. İçerisine HangGiris.cs adında bir class açıyoruz.

HangGiris.cs

public class HangGiris : IDashboardAuthorizationFilter
    {
        public bool Authorize(DashboardContext context)
        {
            var httpContext = context.GetHttpContext();

            return true;
        }
    }

Startup.cs

app.UseHangfireDashboard("/panelyolu", new DashboardOptions {
                DashboardTitle = "Panel Adı",
                AppPath = "/",
                Authorization = new IDashboardAuthorizationFilter[]
                {
                    new HangGiris ()
                }
            });

Şimdi burada yaptığımız şey HangGiris.cs dosyasında bir true veya false değer döndürmek. Örneğin admin panelinize giriş yaptığınız zaman bunu true döndürebilirsiniz. O zaman panele girebilirsiniz. Bu sayede false döndüğü zaman hata verecek ve admin girişi yapmayanlar panelinizi göremeyecekler. Yapmanız gereken HangGiris.cs dosyasında kendi yönetim panelinize yaptığınız giriş kontrolünün aynısını yapıp bool değer döndürmek.

Daha sonrasında siteadi.com/panelyolu diyerek hangfire panelinize ulaşacaksınız.

Sorularınızı yorumlarda yanıtlayabilirim. İyi bloglamalar!

Aşağıya mail adresini girerek web sitemdeki makalelere abone olabilirsin. İlgini çekecek bir makale yazdığım zaman seni haberdar edebilirim!

Yorum Yap

*HTML kodlarına izin verilmemektedir. Düz metin olarak yorum giriniz.