HangFire入门介绍
概述
Hangfire Client:可以创建多种类型的后台作业
Job Storage:将后台作业和与处理相关的其他信息保存在持久存储中。持久性可帮助后台作业在应用程序重新启动、服务器重新启动等情况下存活。这是使用 CLR 的线程池和 Hangfire 执行后台作业之间的主要区别。
Hangfire Server:它实现为一组专用(不是线程池的)后台线程,这些线程从存储中获取作业并处理它们。服务器还负责保持存储清洁并自动删除旧数据。Hangfire 为每个存储后端使用可靠的获取算法,因此您可以在 Web 应用程序内启动处理,而不会在应用程序重新启动、进程终止等时丢失后台作业。
asp.core 引入HangFire
引入相关的Nuget包:
Hangfire.AspNetCore
Hangfire.PostgreSql(使用pgsql存储数据)
PostgreSqlStorageOptions hangfireDBOptions = new PostgreSqlStorageOptions
{
//数据库模式名称
SchemaName = "public",
//设置为 true,那么当你首次使用 Hangfire 时,Hangfire 将会检查数据库中是否存在这些必需的表,如果不存在,则会自动创建这些表。
PrepareSchemaIfNecessary = true,
};
var strHangfireDBConn =
Configuration.GetConnectionString("HangfireConnectionString");
services.AddHangfire(configuration =>
{
configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UsePostgreSqlStorage(strHangfireDBConn, hangfireDBOptions);
});
services.AddHangfireServer();
app.UseHangfireDashboard();
http://localhost:5000/hangfire/
客户端简单调用
//即发即弃-这些作业仅在触发后执行一次,几乎立即执行。
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!"));
//延迟-延迟作业也只执行一次,但不会立即执行 - 仅在指定的时间间隔之后执行。
var jobId2 = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"),TimeSpan.FromMinutes(1));
//CRON 计划多次触发 首次添加成功后会存储在Storage
RecurringJob.AddOrUpdate( "myrecurringjob",() => Console.WriteLine("Recurring!"), Cron.Minutely);
//延续-在父作业完成后执行。
BackgroundJob.ContinueJobWith(jobId,() => Console.WriteLine("Continuation!"));
配置Hangfire Dashboard权限控制
引入相关的Nuget包:
Hangfire.Dashboard.Basic.Authentication
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new[]
{
new HangfireCustomBasicAuthenticationFilter
{
User = "admin",
Pass = "admin"
}
}
});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库