پیاده سازی مشاغل پس زمینه با Hangfire: راهنمای عملی

Summarize this content to 400 words in Persian Lang
Hangfire یک کتابخانه قوی برای مدیریت کارهای پسزمینه در برنامههای NET است که به توسعهدهندگان این امکان را میدهد تا به راحتی کارهایی را که بهصورت ناهمزمان اجرا میشوند ایجاد و مدیریت کنند.
چه در حال برنامهریزی کارهای تکراری، اجرای کارهای یکباره یا مدیریت عملیات زمانبر بدون مسدود کردن رشته اصلی باشید، Hangfire یک راهحل انعطافپذیر و قابل اعتماد ارائه میکند. در این مقاله، راهاندازی Hangfire را برای پاکسازی خودکار نشانههای JWT منقضی شده از پایگاهداده بررسی میکنیم و مطمئن میشویم که سیستم احراز هویت شما کارآمد و ایمن باقی میماند.
الزامات
قبل از اینکه به پیاده سازی بپردازیم، مطمئن شوید که موارد زیر را دارید:
حداقل .NET 6.0 SDK نصب شده است
درک اولیه دات نت و سی شارپ
یک نمونه SQL Server در حال اجرا
Visual Studio یا هر C# IDE ترجیحی
راه اندازی پروژه
ایجاد یک پروژه جدید دات نت:ترمینال یا خط فرمان خود را باز کنید و دستورات زیر را برای ایجاد یک برنامه وب دات نت جدید اجرا کنید:
dotnet new webapi -n HangfireBackgroundJob
cd HangfireBackgroundJob
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
Hangfire را نصب کنید
Hangfire و بسته ذخیره سازی SQL Server آن را به پروژه خود اضافه کنید:
dotnet add package Hangfire
dotnet add package Hangfire.SqlServer
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
Hangfire را پیکربندی کنید
باز کن Startup.cs (یا Program.cs اگر از مدل مینیمال هاست جدید استفاده می کنید) و Hangfire را در آن پیکربندی کنید ConfigureServices روش:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// Configure Hangfire to use SQL Server storage
services.AddHangfire(configuration =>
configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(“Server=your_server;Database=your_database;User Id=your_user;Password=your_password;”, new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.FromSeconds(15),
UseRecommendedIsolationLevel = true,
DisableGlobalLocks = true
}));
services.AddHangfireServer();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
// Use Hangfire Dashboard (optional for monitoring jobs)
app.UseHangfireDashboard();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ایجاد کار پس زمینه
حال، بیایید یک کار پسزمینه ایجاد کنیم که توکنهای منقضی شده JWT را از پایگاه داده حذف میکند.
یک سرویس برای پاکسازی رمز ایجاد کنید
ابتدا سرویسی ایجاد کنید که منطق پاکسازی توکن را مدیریت کند. یک کلاس جدید به نام اضافه کنید TokenCleanupService.cs:
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
public sealed class TokenCleanupService
{
private readonly ApplicationDbContext _context;
private readonly ILoggerTokenCleanupService> _logger;
public TokenCleanupService(ApplicationDbContext context, ILoggerTokenCleanupService> logger)
{
_context = context;
_logger = logger;
}
public async Task CleanUpExpiredTokensAsync()
{
var expiredTokens = await _context.JwtTokens
.Where(t => t.ExpirationDate DateTime.UtcNow)
.ToListAsync();
if (expiredTokens.Any())
{
_context.JwtTokens.RemoveRange(expiredTokens);
await _context.SaveChangesAsync();
_logger.LogInformation(“Deleted {count} expired tokens.”, expiredTokens.Count);
}
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
کار پس زمینه را برنامه ریزی کنید
باز کن Startup.cs یا Program.cs و کار پسزمینه را با استفاده از Hangfire زمانبندی کنید:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IRecurringJobManager recurringJobManager)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseHangfireDashboard();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
// Schedule the token cleanup job to run daily at midnight
recurringJobManager.AddOrUpdate(
“TokenCleanup”,
() => new TokenCleanupService().CleanUpExpiredTokensAsync(),
Cron.Daily);
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اجرا و نظارت بر کار
برنامه خود را با اجرا شروع کنید
dotnet run
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
هدایت به http://localhost:5000/hangfire برای مشاهده داشبورد Hangfire و نظارت بر مشاغل خود.
بررسی اجرای کار
پایگاه داده خود را بررسی کنید تا مطمئن شوید که نشانه های منقضی شده همانطور که انتظار می رود حذف می شوند. همچنین می توانید گزارش های کار را در داشبورد Hangfire مشاهده کنید تا اجرای موفقیت آمیز را تأیید کنید.
نتیجه
استفاده از Hangfire برای مدیریت کارهای پسزمینه در یک برنامه داتنت، روشی ساده و کارآمد برای انجام وظایفی است که باید بهصورت ناهمزمان اجرا شوند.
در این راهنمای عملی، ما یک پروژه Hangfire را راهاندازی کردهایم و یک کار پسزمینه برای پاکسازی توکنهای منقضی شده JWT از پایگاه داده ایجاد کردهایم.
این تضمین می کند که سیستم احراز هویت شما بدون مسدود کردن رشته اصلی برنامه شما تمیز و کارآمد باقی می ماند. انعطاف پذیری و سهولت استفاده Hangfire آن را به انتخابی عالی برای مدیریت وظایف پس زمینه در هر برنامه دات نت تبدیل کرده است.
برای اطلاعات فنی بیشتر و آموزش های عملی، به rmauro.dev مراجعه کنید. کد نویسی مبارک!
Hangfire یک کتابخانه قوی برای مدیریت کارهای پسزمینه در برنامههای NET است که به توسعهدهندگان این امکان را میدهد تا به راحتی کارهایی را که بهصورت ناهمزمان اجرا میشوند ایجاد و مدیریت کنند.
چه در حال برنامهریزی کارهای تکراری، اجرای کارهای یکباره یا مدیریت عملیات زمانبر بدون مسدود کردن رشته اصلی باشید، Hangfire یک راهحل انعطافپذیر و قابل اعتماد ارائه میکند. در این مقاله، راهاندازی Hangfire را برای پاکسازی خودکار نشانههای JWT منقضی شده از پایگاهداده بررسی میکنیم و مطمئن میشویم که سیستم احراز هویت شما کارآمد و ایمن باقی میماند.
الزامات
قبل از اینکه به پیاده سازی بپردازیم، مطمئن شوید که موارد زیر را دارید:
- حداقل .NET 6.0 SDK نصب شده است
- درک اولیه دات نت و سی شارپ
- یک نمونه SQL Server در حال اجرا
- Visual Studio یا هر C# IDE ترجیحی
راه اندازی پروژه
ایجاد یک پروژه جدید دات نت:
ترمینال یا خط فرمان خود را باز کنید و دستورات زیر را برای ایجاد یک برنامه وب دات نت جدید اجرا کنید:
dotnet new webapi -n HangfireBackgroundJob
cd HangfireBackgroundJob
Hangfire را نصب کنید
Hangfire و بسته ذخیره سازی SQL Server آن را به پروژه خود اضافه کنید:
dotnet add package Hangfire
dotnet add package Hangfire.SqlServer
Hangfire را پیکربندی کنید
باز کن Startup.cs
(یا Program.cs
اگر از مدل مینیمال هاست جدید استفاده می کنید) و Hangfire را در آن پیکربندی کنید ConfigureServices
روش:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// Configure Hangfire to use SQL Server storage
services.AddHangfire(configuration =>
configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage("Server=your_server;Database=your_database;User Id=your_user;Password=your_password;", new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.FromSeconds(15),
UseRecommendedIsolationLevel = true,
DisableGlobalLocks = true
}));
services.AddHangfireServer();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
// Use Hangfire Dashboard (optional for monitoring jobs)
app.UseHangfireDashboard();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
ایجاد کار پس زمینه
حال، بیایید یک کار پسزمینه ایجاد کنیم که توکنهای منقضی شده JWT را از پایگاه داده حذف میکند.
یک سرویس برای پاکسازی رمز ایجاد کنید
ابتدا سرویسی ایجاد کنید که منطق پاکسازی توکن را مدیریت کند. یک کلاس جدید به نام اضافه کنید TokenCleanupService.cs
:
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
public sealed class TokenCleanupService
{
private readonly ApplicationDbContext _context;
private readonly ILoggerTokenCleanupService> _logger;
public TokenCleanupService(ApplicationDbContext context, ILoggerTokenCleanupService> logger)
{
_context = context;
_logger = logger;
}
public async Task CleanUpExpiredTokensAsync()
{
var expiredTokens = await _context.JwtTokens
.Where(t => t.ExpirationDate DateTime.UtcNow)
.ToListAsync();
if (expiredTokens.Any())
{
_context.JwtTokens.RemoveRange(expiredTokens);
await _context.SaveChangesAsync();
_logger.LogInformation("Deleted {count} expired tokens.", expiredTokens.Count);
}
}
}
کار پس زمینه را برنامه ریزی کنید
باز کن Startup.cs
یا Program.cs
و کار پسزمینه را با استفاده از Hangfire زمانبندی کنید:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IRecurringJobManager recurringJobManager)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseHangfireDashboard();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
// Schedule the token cleanup job to run daily at midnight
recurringJobManager.AddOrUpdate(
"TokenCleanup",
() => new TokenCleanupService().CleanUpExpiredTokensAsync(),
Cron.Daily);
}
اجرا و نظارت بر کار
برنامه خود را با اجرا شروع کنید
dotnet run
هدایت به http://localhost:5000/hangfire
برای مشاهده داشبورد Hangfire و نظارت بر مشاغل خود.
بررسی اجرای کار
پایگاه داده خود را بررسی کنید تا مطمئن شوید که نشانه های منقضی شده همانطور که انتظار می رود حذف می شوند. همچنین می توانید گزارش های کار را در داشبورد Hangfire مشاهده کنید تا اجرای موفقیت آمیز را تأیید کنید.
نتیجه
استفاده از Hangfire برای مدیریت کارهای پسزمینه در یک برنامه داتنت، روشی ساده و کارآمد برای انجام وظایفی است که باید بهصورت ناهمزمان اجرا شوند.
در این راهنمای عملی، ما یک پروژه Hangfire را راهاندازی کردهایم و یک کار پسزمینه برای پاکسازی توکنهای منقضی شده JWT از پایگاه داده ایجاد کردهایم.
این تضمین می کند که سیستم احراز هویت شما بدون مسدود کردن رشته اصلی برنامه شما تمیز و کارآمد باقی می ماند. انعطاف پذیری و سهولت استفاده Hangfire آن را به انتخابی عالی برای مدیریت وظایف پس زمینه در هر برنامه دات نت تبدیل کرده است.
برای اطلاعات فنی بیشتر و آموزش های عملی، به rmauro.dev مراجعه کنید. کد نویسی مبارک!