زمانبندی کارهای پس‌زمینه‌ای با استفاده از Hangfire در ASP.NET Core

Hangfire

در این مقاله میخواهیم راجب زمانبندی کارهای پس‌زمینه‌ای با استفاده از Hangfire در ASP.NET Core صحبت کنیم.تا پایان مقاله همراه ما باشید.

Hangfire در ASP.NET Core

Hangfire یک کتابخانه‌ی متن‌باز برای زمانبندی و اجرای کارهای پس‌زمینه‌ای در برنامه‌های .NET است.

هدف این مقاله نشان دادن نحوه‌ی راه‌اندازی Hangfire و نوشتن مقداری کد جهت زمانبندی یک کار اولیه در پروژه‌ی ASP.NET Core است.

زمانبندی و نظارت وظایف پس‌زمینه‌ای کاری چالش برانگیز است.

هر برنامه‌ی بزرگی نیاز است وظایف پس‌زمینه‌ای را پیاده‌سازی کند تا کارهای پس‌زمینه‌ای از جمله پردازش داده‌ها، یادآورهای ایمیل، و پردازش صف‌های SMS و صف‌های ایمیل را به انجام برساند.

Windows Service رایج‌ترین رویکرد جهت برآوردن الزامات است.

امروز، Hangfire را را‌ه‌اندازی خواهیم کرد و مقداری کد جهت زمانبندی یک کار اولیه در پروژه‌ی ASP.NET Core خواهیم نوشت.

Hangfire یک کتابخانه‌ی متن‌باز برای زمانبندی و اجرای کارهای پس‌زمینه‌ای در برنامه‌های .NET است.

قادر خواهید بود یک فرآیند پس‌زمینه‌ای ساده درون همان مخزن برنامه یا نخ بدون ایجاد برنامه‌های جداگانه ایجاد کنید.

Hangfire کارهایی پس‌زمینه‌ای در انباره‌ی پایدار، مانند MS SQL Server، Redis، MongoDb، و … ، ایجاد می‌کند که این کار می‌تواند مانع از دست رفتن کار شما در بازیابی مخزن‌های IIS یا شیوع استثناء شود.

ASP.NET Core هم اکنون یک پلتفرم رایج برای MVC و Web API بدون نیاز به ایجاد پروژه‌ای جداگانه است.

بیایید یک پروژه‌ی جدید ASP.NET Core MVC ایجاد کنیم.

پس از اینکه پروژه ایجاد شد، Hangfire را از NuGet نصب کنید.

می‌توانید Hangfire را یا از Package Manager Console و یا از NuGet Package Manager نصب کنید.

نصب از طریق NuGet

PM> Install-Package HangFire  

می‌خواهیم Hangfire را با استفاده از NuGet Package Manager نصب کنیم. نسخه‌ی پایدار Hangfire  ( فعلی ۱.۶.۷) را جستجو کرده و در پروژه نصب کنید.

Hangfire در ASP.NET Core

پس از نصب با موفقیت، بیایید Hangfire را پیکربندی کنیم.

Configuration

کلاس Startup.cs را باز کرده و متد ConfigureServices را جهت ثبت Hangfire به عنوان یک سرویس قرار دهید.

public void ConfigureServices(IServiceCollection services)  
{  
    // Add Hangfire services.  
    services.AddHangfire(x => x.UseSqlServerStorage(Configuration.GetConnectionString("DefaultConnection")));  
      
    // Add framework services.  
    services.AddMvc();  
} 

در اینجا، Hangfire را با SQL Server ثبت می‌کنیم.

باید یک رشته‌ی اتصال برای قراردادن پایگاه‌داده‌ی SQL Server به نام HangFireDb فراهم کنیم.

DefaultConnection یک نام رشته‌ی اتصال است، که به فایل appsettings.json افزوده شده است.

"ConnectionStrings": {  
    "DefaultConnection": "Data Source=.\\SQLEXPRESS2014;Initial Catalog=HangFireDb;Integrated Security=True;"  
  } 

هنگامیکه سرویس پیکربندی شد، برای افزودن کدهای زیر به متد Configure بروید.

در اینجا، app.UseHangfireDashboard() داشبورد را راه‌اندازی خواهد کرد.

در حالیکه http://<website-url>/hangfire، و app.UseHangfireServer() نمونه‌ای جدید برای BackgroundJobServer ثبت خواهند کرد.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)  
{  
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));  
    loggerFactory.AddDebug();  
  
    app.UseHangfireDashboard();  
    app.UseHangfireServer();  
      
    app.UseDeveloperExceptionPage();  
    app.UseBrowserLink();  
      
    app.UseStaticFiles();  
    app.UseMvc(routes =>  
    {  
        routes.MapRoute(  
            name: "default",  
            template: "{controller=Home}/{action=Index}/{id?}");  
    });  
}  

اکنون، بیایید برنامه را اجرا کنیم. داشبورد Hangfire در مرورگر از طریق وارد کردن نشانی http://<website-url>/hangfire در دسترس است.

Hangfire در ASP.NET Core

Hangfire،رابط کاربری یکپارچه‌ی نظارت بر وب را ارائه می‌دهد، که جهت کنترل هر جنبه‌ای از پردازش کار پس‌زمینه‌ای، همچنین آمار و ارقام، استثنائات، و تاریخچه‌ی کارهای پس‌زمینه‌ای مورد استفاده قرار می‌گیرد.

هنگامیکه Hangfire Server شروع به کار می‌کند، به دنبال یک پایگاه‌داده‌ی پیکربندی شده خواهد گشت و پایگاه‌داده‌ی schema مورد نیاز را بررسی خواهد کرد.

اگر Schema موجود نباشد، یک Schema ایجاد می‌کند. تصویر زیر فهرستی از schemas ایجاد شده هنگام اجرای برنامه را نشان می‌دهد.

Hangfire در ASP.NET Core

چگونه کار می‌کند؟

Hangfire انواع مختلفی از کارهای پس‌زمینه‌ای را مدیریت می‌کند، و همگی آن‌ها در یک محیط اجرایی مجزا فراخوانی می‌شوند.

با Hangfire، می‌توانید موارد زیر را ایجاد کنید:

Fire and Forget

کارهای fire and forget یکبار در روندی فوری پس از ایجاد، اجرا می‌شوند.

هنگامیکه یک کار fire-and-forget ایجاد می‌کنید، در صف آن (بطور پیش‌فرض “default”، اما چندین صف پشتیبانی می‌شود) ذخیره می‌شود.

این صف توسط چند کارگزار اختصاصی، که یک کار را واکشی و اجرا می‌کنند، شنود می‌شود.

BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget Job Executed"));  

Delayed

پس از تاخیر مشخص شده، کار در صف آن قرار داده و به عنوان یک کار fire-and-forget منظم فراخوانی خواهد شد.

BackgroundJob.Schedule(() => Console.WriteLine("Delayed job executed"), TimeSpan.FromMinutes(1));  

Recurring

کارهای تکراری در هر وقفه‌ی تعریف شده تکرار خواهند شد. می‌توانید وقفه‌ها را از چند میلی ثانیه تا چندین سال تعریف کنید.

RecurringJob.AddOrUpdate(() => Console.WriteLine("Minutely Job executed"), Cron.Minutely);  

Continuations

Continuationها به شما اجازه‌ می‌دهند تا جریان‌های کاری پیچیده را از طریق زنجیره کردن چندکار پس‌زمینه‌ای به یکدیگر تعریف کنید. در اینجا، کار دوم همراه با کار اول صف‌بندی می‌شود.

var id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello, "));  
BackgroundJob.ContinueWith(id, () => Console.WriteLine("world!")); 

پس از اجرای برنامه، نتایج جالبی در داشبورد خواهیم داشت.

Hangfire در ASP.NET Core

همانطور که می‌توانید مشاهده کنید، داشبورد اطلاعات معناداری را مانند فهرستی از کارهای موفق با شناسه، نام، زمان اجرا، و مدت زمان، در اختیار قرار می‌دهد.

ویژگی صف‌بندی مجدد کارها جهت از بین بردن مجدد کار انتخابی از فهرست ارائه شده است.

در ادامه تصاویری برای انواع مختلفی از کارهای پس‌زمینه‌ای آورده شده است.

Fire and forget job

 Recurring job

 Recurring job

Change the Dashboard URL

بطور پیش‌فرض،Hangfireجهت دسترسی به داشبورد بر روی http://<website-url>/hangfire تنظیم شده است.

پیکربندی نشانی دلخواه خود، کاری آسان است.

app.UseHangfireDashboard("/dashboard");  

دسترسی از راه دور

پیکربندی پیش‌فرض Hangfireتنها برای محیط محلی راه‌اندازی می‌شود.

به منظور اینکه Hangfireدر محیط‌های تولیدی کار کند، نیاز است IAuthorizationFilter دلخواه را پیاده‌سازی کنیم.

بنابراین، کد ما اکنون بدین صورت تغییر می‌کند.

app.UseHangfireDashboard("/dashboard", new DashboardOptions    
{   
    Authorization = new [] { new HangireAuthorizationFilter() }  
});  

اکنون همه چیز به خوبی کار خواهد کرد.
می‌توانید مستندات دقیق را در وب‌سایت رسمی Hangfireبیابید.

دانلود source code یا fork در GitHub

خلاصه

در این مقاله، نحوه‌ی پیکربندی Hangfire در ASP.NET Core را آموختیم.

کدهایی را برای صف‌بندی کارهای پس‌زمینه‌ای با استفاده از Hangfireدر ASP.NET Core نوشتیم.

پیاده‌سازی Hangfireراحت بوده و داشبورد شما را قادر می‌سازد تا هر جنبه‌ای از پردازش کارهای پس‌زمینه‌ای، همچنین آمار و ارقام، استثنائات، و تاریخچه‌ی کار پس‌زمینه‌ای، نظارت و کنترل داشته باشید.

  • پسورد: www.mspsoft.com
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.