HangFire入门介绍

发布时间 2023-06-13 00:34:26作者: 广州大雄

概述

image

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/
image
image

客户端简单调用

//即发即弃-这些作业仅在触发后执行一次,几乎立即执行。
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"
		}
	}
});

image