Hangfire Kullanımı, Örnek Uygulama

  1. cemmm
    6
    987
    26.11.2019 11:56:00

    Hangfire nedir arkadaşlar tam olarak, bir örnek uygulama üzerinden anlatabilir misiniz ?

    hangfire .net .net-core asp.net asp.net-mvc 9 gün önce 194 Görüntüleme

( 1 ) Cevap

  1. doganayylmz
    5
    275
    26.11.2019 17:11:00

    Background da çalışmasını istediğimiz işlemleri yönetmemizi sağlayan açık kaynak kodlu bir kütüphane dememizde bir sakınca yok diye düşünüyorum.

    Benim en çok sevdiği yönü, Windows service den beni kurtarmasıdır.

    Kurulumu ve kullanımı ise gayet basittir.

    Asp.net Mvc için kullanımından bahsedeceğim.

    1) Bir tane .net Asp.Net Mvc projesi ekliyoruz.

    2) Nuget dan aşağıdaki paketleri yüklüyoruz.

    Hangfire.Core
    Hangfire.SqlServer
    Hangfire.AspNet
    

    hangfire-nugget-kurulum-kullanim

    3) Hangfire da storage için redis gibi yöntemlerde var fakat ben ms sql server kullanacağım.

    CREATE DATABASE [HangfireTest]
    GO
    

    4) Kurulum bu kadar. Sıra geldi kodlama tarafına. İki yol var kullanmak için, birincisi Startup.cs içinden

    Projenizde Startup.cs yoksa ekliyoruz ve içeriğini aşağıdaki gibi ayarlıyoruz, var sa var olan kodları silmeden ekliyoruz :)

    Sql bağlantısı için, eğer ekspress de deniyorsanız, benim belirttiğim connection string yerine şunu yazmanız yeterli

    Server=.\\SQLEXPRESS; Database=HangfireTest; Integrated Security=True;
    

    Startup.cs içeriği

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using Hangfire;
    using Hangfire.SqlServer;
    using Owin;
    
    namespace HangFireTest
    {
        public class Startup
        {
            private IEnumerable<IDisposable> GetHangfireServers()
            {
                GlobalConfiguration.Configuration
                    .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
                    .UseSimpleAssemblyNameTypeSerializer()
                    .UseRecommendedSerializerSettings()
                    .UseSqlServerStorage("data source=192.192.192.192; Timeout=90; initial catalog=HangfireTest; user id=test; password=12345*!;", new SqlServerStorageOptions
                    {
                        CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
                        SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
                        QueuePollInterval = TimeSpan.Zero,
                        UseRecommendedIsolationLevel = true,
                        UsePageLocksOnDequeue = true,
                        DisableGlobalLocks = true
                    });
    
                yield return new BackgroundJobServer();
            }
    
            public void Configuration(IAppBuilder app)
            {
                app.UseHangfireAspNet(GetHangfireServers);
                app.UseHangfireDashboard();
    
                // örnek bir hello world job ı oluşturma
                BackgroundJob.Enqueue(() => Debug.WriteLine("Hello world from Hangfire!"));
    
                //TestJob sınıfımızın bir metodu ile Job oluşturalım
                TestJob testJob = new TestJob();
                BackgroundJob.Enqueue(() => testJob.IsYap());
    
            }
        }
    }
    

    5)İkinci yol, Startup.cs ile değilde Global.asax da olsun isteyenler için, eklediğimiz kodları yorum ile belirttim

    Global.asax.cs

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    using Hangfire;
    using Hangfire.SqlServer;
    
    namespace HangFireTest
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                //Bu  satırı ekliyoruz
                HangfireAspNet.Use(GetHangfireServers);
    
                // örnek bir hello world job ı oluşturma
                BackgroundJob.Enqueue(() => Debug.WriteLine("Hello world from Hangfire!"));
    
                //TestJob sınıfımızın bir metodu ile Job oluşturalım
                TestJob testJob = new TestJob();
                BackgroundJob.Enqueue(() => testJob.IsYap());
            }
    
            //Ve bu metodu ekliyoruz
            private IEnumerable<IDisposable> GetHangfireServers()
            {
                GlobalConfiguration.Configuration
                    .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
                    .UseSimpleAssemblyNameTypeSerializer()
                    .UseRecommendedSerializerSettings()
                    .UseSqlServerStorage("data source=192.192.192.192; Timeout=90; initial catalog=HangfireTest; user id=test; password=12345*!;", new SqlServerStorageOptions
                    {
                        CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
                        SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
                        QueuePollInterval = TimeSpan.Zero,
                        UseRecommendedIsolationLevel = true,
                        UsePageLocksOnDequeue = true,
                        DisableGlobalLocks = true
                    });
    
                yield return new BackgroundJobServer();
            }
        }
    }
    

    Evet, bu kadar, kritik nokta, ister global.asax kullanın, ister startup.cs kullanın, joblar aşağıdaki gibi oluşturuluyor,

            // örnek bir hello world job ı oluşturma
            BackgroundJob.Enqueue(() => Debug.WriteLine("Hello world from Hangfire!"));
    
            //TestJob sınıfımızın bir metodu ile Job oluşturalım
            TestJob testJob = new TestJob();
            BackgroundJob.Enqueue(() => testJob.IsYap());
    

    Joblarımızın çalışmasını buradan monitoring edebiliriz

    hangfire-nedir-kurulum-kullanim

    http://sizinlocaladresiniz/hangfire

Cevabınız