Trong lập trình, bạn sẽ thường gặp 1 số vấn đề timeout như xử lý file lớn, import data, clean up database. Ngoài ra, bạn cần phải thiết lập thời gian để chạy schedule task như gởi report định kỳ theo tuần, theo ngày… Bạn nghĩ ngay đến Windows Service. Nhưng vấn đề là bạn cần phải host trên Windows Server. Nếu chỉ sử dụng IIS thôi thì HangFire có lẽ là sự lựa chọn tốt nhất.
HangFire bao gồm bản tính phí và bản không tính phí. Với phiên bản miễn phí, có lẽ đủ cho bạn chạy chương trình.
Bạn có thể xem thêm thông tin về HangFire tại địa chỉ: https://www.hangfire.io/
Sau khi cài đặt, bạn cần 1 database SQL Server để Hangfire trỏ tới đó.
Trong app.config, bạn đặt 1 key như sau:
Trong hàm Main.cs
Cài HangFire qua Nuget:
Sau khi cài đặt HangFire, bạn sẽ thấy file readme.txt, hướng dẫn cấu hình HangFire trong OWIN và trong .NET Core.
Đối với project sử dụng .NET Framework, bạn sẽ xem phần cấu hình cho OWIN.
Để thấy HangFire Dashboard, bạn vào đường dẫn http:///hangfire URL.
Bạn có thể thấy danh sách các jobs, servers, real-time graph và các thứ khác trong DashBoard. Mặc định Hangfire sẽ map Dashboard vào đường dẫn /hangfire. Nhưng bạn có thể thay đổi url đó bằng cách truyền tham số vào hàm UseHangfireDashboard.
Để theo dõi job, bạn vào Dashboard, chọn Recurring Jobs:
Download sample: https://www.mediafire.com/file/apz0abelnlxfle1
HangFire bao gồm bản tính phí và bản không tính phí. Với phiên bản miễn phí, có lẽ đủ cho bạn chạy chương trình.
Bạn có thể xem thêm thông tin về HangFire tại địa chỉ: https://www.hangfire.io/
An easy way to perform background processing in .NET and .NET Core applications. No Windows Service or separate process required.Có 4 loại job trong HangFire (Free):
Backed by persistent storage. Open and free for commercial use.
- Fire-and-forgot job: thực thi 1 lần và gần như ngay lập tức sau khi khởi tạo.
- Delayed job: Thực thi 1 lần sau 1 khoảng thời gian quy định
- Recurring job: Lặp lại công việc nhiều lần dựa trên CRON schedule.
- Continuations: Tiếp tục thực thi công việc sau khi công việc trước đó thực hiện xong.
Thiết lập trong Console Application
Bạn cần 2 package: Hangfire.Core và Hangfire.SqlServerSau khi cài đặt, bạn cần 1 database SQL Server để Hangfire trỏ tới đó.
Trong app.config, bạn đặt 1 key như sau:
<add name="HangfireContext" connectionString="Server=.;Database=your-db;User ID=sa;Password=123456;MultipleActiveResultSets=True;Trusted_Connection=False;" providerName="System.Data.SqlClient" />
Trong hàm Main.cs
static void Main(string[] args)
{
GlobalConfiguration.Configuration
//.UseColouredConsoleLogProvider()
.UseSqlServerStorage("HangfireContext");
using (var server = new BackgroundJobServer())
{
Console.WriteLine("Hangfire Server started. Press any key to exit...");
GetDateTime();
BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));
BackgroundJob.Schedule(()=> ScheduleJob(), TimeSpan.FromMinutes(1));
Console.ReadKey();
}
}
public static void ScheduleJob()
{
Console.WriteLine(DateTime.Now.ToLocalTime());
Console.WriteLine("Schedule Job");
}
static void GetDateTime()
{
Console.WriteLine(DateTime.Now.ToLocalTime());
}
Kết quả:Thiết lập trong ASP.NET WEB API
Bạn tạo project ASP.NET WEB API.Cài HangFire qua Nuget:
Install-Package HangfireHoặc thông qua Nuget Package:
Sau khi cài đặt HangFire, bạn sẽ thấy file readme.txt, hướng dẫn cấu hình HangFire trong OWIN và trong .NET Core.
Đối với project sử dụng .NET Framework, bạn sẽ xem phần cấu hình cho OWIN.
Thêm file OWIN
Bạn tạo mới file Startup.cs với nội dung:
using Hangfire;
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(HangFireWebExample.Startup))]
namespace HangFireWebExample
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration.UseSqlServerStorage(("<name or connection string>");
app.UseHangfireDashboard();
app.UseHangfireServer();
}
}
}
Bây giờ bạn chạy ứng dụng lên.Để thấy HangFire Dashboard, bạn vào đường dẫn http://
app.UseHangfireDashboard("/WebJobsDashboard");
app.UseHangfireServer();
Nếu bạn mở database lên, bạn sẽ thấy HangFire sẽ tạo các table để quản lý thông tin background job.Để theo dõi job, bạn vào Dashboard, chọn Recurring Jobs:
Download sample: https://www.mediafire.com/file/apz0abelnlxfle1
Kết luận
HangFire là 1 third party khá tốt để chạy background task cho website. Tuy nhiên, website của bạn phải luôn ở trạng thái sẵn sàng, nếu không HangFire sẽ không chạy được background task.
Nhatkyhoctap's blog
Nhận xét
Đăng nhận xét