Abp集成HangFire開源.NET任務(wù)調(diào)度框架
簡要說明
后臺作業(yè)在系統(tǒng)開發(fā)的過程當(dāng)中,是比較常用的功能。因?yàn)榭偸怯幸恍╅L耗時(shí)的任務(wù),而這些任務(wù)我們不是立即響應(yīng)的,例如 Excel 文檔導(dǎo)入、批量發(fā)送短信通知等。
ABP vNext 提供了后臺作業(yè)的支持,并且還提供了對 HangFire 和 RabbitMQ 的后臺作業(yè)集成。開發(fā)人員在使用這些第三方庫的時(shí)候,基本就是開箱即用,不需要做其他復(fù)雜的配置。
ABP vNext 的實(shí)現(xiàn)就是在 CLR 的 Timer 之上封裝了一層,周期性地執(zhí)行用戶邏輯。
ABP vNext 默認(rèn)提供的 后臺任務(wù)管理器,就是在后臺作業(yè)基礎(chǔ)之上進(jìn)行的封裝。
涉及到后臺任務(wù)的模塊一共有 6 個(gè),它們分別是:
- Volo.Abp.Threading :提供了一些常用的線程組件,其中 AbpTimer 就是在里面實(shí)現(xiàn)的。
- Volo.Abp.BackgroundWorkers :后臺任務(wù)的定義和實(shí)現(xiàn)。
- Volo.Abp.BackgroundJobs.Abstractions :后臺任務(wù)的一些共有定義。
- Volo.Abp.BackgroundJobs :默認(rèn)的后臺任務(wù)管理器實(shí)現(xiàn)。
- Volo.Abp.BackgroundJobs.HangFire :基于 Hangfire 庫實(shí)現(xiàn)的后臺任務(wù)管理器。
- Volo.Abp.BackgroundJobs.RabbitMQ :基于 RabbitMQ 實(shí)現(xiàn)的后臺任務(wù)管理器。
什么是Hangfire
Hangfire 是一個(gè)開源的.NET任務(wù)調(diào)度框架,目前1.6+版本已支持.NET Core。個(gè)人認(rèn)為它最大特點(diǎn)在于內(nèi)置提供集成化的控制臺,方便后臺查看及監(jiān)控。
引用
<PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="1.0.2" /> <PackageReference Include="Volo.Abp.Autofac" Version="1.0.2" /> <PackageReference Include="Hangfire" Version="1.7.7" /> <PackageReference Include="Hangfire.AspNetCore" Version="1.7.7" /> <PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" /> <PackageReference Include="Hangfire.Redis.StackExchange.StrongName" Version="1.7.0" />
啟動(dòng)
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddApplication();
var Configuration = services.GetConfiguration();
GlobalStateHandlers.Handlers.Add(new SucceededStateExpireHandler(int.Parse(Configuration["Hangfire:JobExpirationTimeout"])));
services.AddHostedService();
services.AddHangfire(x =>
{
var connectionString = Configuration["Hangfire:Redis:ConnectionString"];
x.UseRedisStorage(connectionString, new RedisStorageOptions()
{
//活動(dòng)服務(wù)器超時(shí)時(shí)間
InvisibilityTimeout = TimeSpan.FromMinutes(60),
Db = int.Parse(Configuration["Hangfire:Redis:Db"])
});
x.UseDashboardMetric(DashboardMetrics.ServerCount)
.UseDashboardMetric(DashboardMetrics.RecurringJobCount)
.UseDashboardMetric(DashboardMetrics.RetriesCount)
.UseDashboardMetric(DashboardMetrics.AwaitingCount)
.UseDashboardMetric(DashboardMetrics.EnqueuedAndQueueCount)
.UseDashboardMetric(DashboardMetrics.ScheduledCount)
.UseDashboardMetric(DashboardMetrics.ProcessingCount)
.UseDashboardMetric(DashboardMetrics.SucceededCount)
.UseDashboardMetric(DashboardMetrics.FailedCount)
.UseDashboardMetric(DashboardMetrics.EnqueuedCountOrNull)
.UseDashboardMetric(DashboardMetrics.FailedCountOrNull)
.UseDashboardMetric(DashboardMetrics.DeletedCount);
});
}
public void Configure(IApplicationBuilder app, IConfiguration Configuration)
{
app.InitializeApplication();
app.UseAuthorization();
var filter = new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions
{
SslRedirect = false,
RequireSsl = false,
LoginCaseSensitive = false,
Users = new[]
{
new BasicAuthAuthorizationUser
{
Login = Configuration["Hangfire:Login"] ,
PasswordClear= Configuration["Hangfire:PasswordClear"]
}
}
});
app.UseHangfireDashboard("", new DashboardOptions
{
Authorization = new[]
{
filter
},
});
var jobOptions = new BackgroundJobServerOptions
{
Queues = new[] { "critical", "test", "default" },
WorkerCount = Environment.ProcessorCount * int.Parse(Configuration["Hangfire:ProcessorCount"]),
ServerName = Configuration["Hangfire:ServerName"],
SchedulePollingInterval = TimeSpan.FromSeconds(1), //計(jì)劃輪詢間隔 支持任務(wù)到秒
};
app.UseHangfireServer(jobOptions);
}
}設(shè)置
///
/// 已完成的job設(shè)置過期,防止數(shù)據(jù)無限增長
///
public class SucceededStateExpireHandler : IStateHandler
{
public TimeSpan JobExpirationTimeout;
public SucceededStateExpireHandler(int jobExpirationTimeout)
{
JobExpirationTimeout = TimeSpan.FromMinutes(jobExpirationTimeout);
}
public string StateName => SucceededState.StateName;
public void Apply(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
context.JobExpirationTimeout = JobExpirationTimeout;
}
public void Unapply(ApplyStateContext context, IWriteOnlyTransaction transaction)
{
}
}以上就是Abp集成HangFire開源.NET任務(wù)調(diào)度框架的詳細(xì)內(nèi)容,更多關(guān)于Abp集成HangFire框架的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解在ASP.NET Core下使用SignalR技術(shù)
本篇文章主要介紹了在ASP.NET Core下使用SignalR技術(shù) ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
asp.net利用反射實(shí)現(xiàn)給model類賦值的方法
這篇文章主要介紹了asp.net利用反射實(shí)現(xiàn)給model類賦值的方法,結(jié)合實(shí)例形式分析了asp.net使用反射給model類賦值的操作步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-03-03
asp.net 仿微信端菜單設(shè)置實(shí)例代碼詳解
本文通過實(shí)例代碼給大家介紹了asp.net 仿微信端菜單設(shè)置方法,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-11-11
Asp.net 時(shí)間操作基類(支持短日期,長日期,時(shí)間差)
支持短日期,長日期,時(shí)間差的操作基類,方便大家直接使用2008-11-11
ASP.NET?MVC實(shí)現(xiàn)區(qū)域路由
這篇文章介紹了ASP.NET?MVC實(shí)現(xiàn)區(qū)域路由的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03

