نحوه‌ی کار با Hangfire در سی شارپ

 Hangfire در سی شارپ

Hangfire در سی شارپ ، فریمورکی متن‌باز برای زمانبندی کارها، زمانبندی وظایف تکراری fire-and-forget در برنامه‌های Web بدون نیاز به Windows Service است. امیدارم از این مقاله بهره ببرید.

Hangfire در سی شارپ

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

یک کتابخانه‌ی متن‌باز مشهور، Hangfire فریمورکی است که می‌تواند برای زمانبندی کارهای پشت‌زمینه ای در .Net مورد استفاده قرار بگیرد.

چرا باید از Hangfire استفاده کنیم؟

امروزه از فریمورک‌های زمانبندی بسیاری در دسترس هستند.

پس چرا باید از Hangfire به جای، فرضا Quartz.NET، که یک فریمورک مشهور دیگر که مدت زیادی است مورد استفاده قرار می‌گیرد، استفاده کنید؟

یکی از معایب عمده‌ی Quartz.Net این است که نیاز به یک Windows Service دارد. در مقابل، برای استفاده از Hangfire در برنامه‌ی خود نیازی به Windows Server، Hangfire را به انتخابی مناسب نسبت به Quartz.Net تبدیل می‌کند.

Hangfire از خط لوله‌ی پردازش درخواست ASP.Net جهت پردازش و اجرای کارها بهره می‌گیرد.

توجه داشته باشید که Hangfire به برنامه‌های Web محدود نمی‌شود؛ می‌توانید از آن در برنامه‌های Console خود نیز استفاده کنید. مستندات Hangfire بسیار دقیق و ساختاریافته است، و بهترین ویژگی آن، داشبورد داخل آن است.

داشبورد Hangfire اطلاعاتی دقیق در رابطه با کارها، صف‌ها، وضعیت کارها و … نمایش می‌دهد.

Hangfire در سی شارپ

برای ایجاد یک پروژه‌ی جدید در Visual Studio که از Hangfire بهره ببرد، این مراحل را دنبال کنید:

  1. Visual Studio 2015 را باز کنید.
  2. بر روی File > New > Project کلیک کنید.
  3. Visual C# > Web را از فهرست قالب‌های پروژه‌ی نمایش داده شده انتخاب کنید.
  4.  ASP.Net Web Application را از فهرست قالب‌های پروژه‌ی Web انتخاب کنید.
  5.  پروژه را با نامی ذخیره کنید.

مرحله‌ی بعد، نصب و پیکربندی Hangfire در برنامه‌تان است؛

روند آن کاملا واضح است. می‌توانید Hangfire را از طریق NuGet Package Manager در Visual Studio نصب کنید.

به جای آن، می‌توانید از Package Manager Console نیز برای نصب کتابخانه‌ی Hangfire استفاده کنید.

نصب پیش‌فرض Hangfire از SQL Server برای ذخیره‌سازی اطلاعات زمانبندی بهره می‌برد.

علاوه بر آن، اگر در عوض از Redis برای ذخیره استفاده می‌کنید، می‌توانید Hangfire.Redis را نصب کنید.

توجه داشته باشید که Hangfire کارهای شما را در یک انباره‌ی پایدار ذخیره می‌کند، نیاز است انباره را پیش از شروع استفاده از Hangfire پیکربندی کنید.

برای این کار، یک پایگاه‌داده ایجاد کرده و اعتبارنامه‌های پایگاه‌داده را در رشته‌ی اتصال درون فایل پیکربندی مشخص کنید.

نیازی نیست جداول را در پایگاه‌داده‌ی خود ایجاد کنید؛ Hangfire بطور خودکار این کار را برای شما انجام خواهد داد.

چگونگی و زمان انجام آن را خواهیم دید.

اکنون به پایگاه‌داده‌ی ایجاد شده و اطلاعات رشته‌ی اتصال در فایل پیکربندی برنامه مشخص شده است، مرحله‌ی بعد تغییر فایل Startup.cs و فراهم کردن اطلاعات مورد نیاز رشته‌ی اتصال است.

فهرست کد زیر ظاهر فایل Startup.cs پس از مشخص شدن جزئیات پیکربندی را نشان می‌دهد.

[assembly: OwinStartupAttribute(typeof(HangFire.Startup))]

namespace HangFire

{

    public partial class Startup

    {

        public void Configuration(IAppBuilder app)

        {

            ConfigureAuth(app);

            GlobalConfiguration.Configuration

                .UseSqlServerStorage("DefaultConnection");

            BackgroundJob.Enqueue(() => Console.WriteLine("Getting Started with HangFire!"));

            app.UseHangfireDashboard();

            app.UseHangfireServer();

        }

    }

}

کار شما تمام است.

زمانیکه برنامه را اجرا و پسوند ” /hangfire ” را به URL اضافه کنید، می‌توانید داشبورد Hangfire را مشاهده کنید.

هنگامیکه برای اولین بار آن را اجرا می‌کنید، یک جدول جدید در پایگاه‌داده ایجاد می‌شود.

جداولی که ایجاد می‌شوند شامل AggregatedCounter، Counter، Hash، Job، JobParameter، JobQueue، List، Scheme، Server، Set، و State هستند.

ایجاد یک پس‌زمینه‌ی fire-and-forget در Hangfire بسیار ساده است.

می‌توانید یک کار پس‌زمینه‌ای را با استفاده از متد Enqueue() از کلاس BackgroundJob ایجاد کنید.

در اینجا مثالی آورده شده است:

BackgroundJob.Enqueue(() => Console.WriteLine("This is a fire-and-forget job that would run in the background."));

یک کار پس‌زمینه‌ای معوق کاری است که منتظر می‌ماند (برای وقفه‌ی تعویق)، سپس بطوری بسیار مشابه با یک کار پس‌زمینه‌ای fire-and-forget اجرا می‌شود.

قطعه کد زیر نشان می‌دهد که چگونه می‌توانید یک کار پس‌زمینه‌ای معوق را با استفاده از متد Schedule() از کلاس BackgroundJob ایجاد کنید.

BackgroundJob.Schedule(() => Console.WriteLine("This background job would execute after a delay."), TimeSpan.FromMilliseconds(1000));

اگر قرار باشد کارهایی را اجرا کنید که پس از وقفه‌ی مشخصی از زمان اجرا خواهند شد، نیاز خواهد بود کارهایی تکراری در Hangfire ایجاد کنید.

جهت ایجاد یک کار تکراری، نیاز است کلاس RecurringJob را به کار بگیرید.

توجه داشته باشید که می‌توانید عبارت “cron” را نیز هنگام زمانبندی کارها در Hangfire مشخص کنید.

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

BackgroundJob.Schedule(() => Console.WriteLine("This background job would execute after a delay."), TimeSpan.FromMilliseconds(1000));
زهره سلطانیان

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

دیدگاه‌ها

*
*

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