Visual Studio 2019 16.8.3
.NET Core 5.0
1.简介
2.工作方式
3.特点
1.安装
2.配置
3.创建任务
4.启动服务
三、总结
Hangfire是一个开源的.NET任务调度框架,可以定时执行任务、延迟执行任务、以一定时间间隔重复执行任务等。
Hangfire具有可视化控制台,可以直观的看到任务调度情况。并且可以持久化存储,支持分布式任务调度。
Hangfire有三个主要的组成部分:客户端、存储介质、服务器
客户端负责创建任务,将任务序列化后保存到指定存储介质。
存储介质可以是SQL Server、MySQL、Redis。
服务器用来处理任务,作为一个专用的后台线程,从存储介质中获取任务并处理任务,此外服务器还负责,存储介质中的数据清理。
通过一张图了解:
来自hangfire官网,由英文翻译而来。
这里介绍简单的入门使用,在 控制台应用(.NET Core)中使用Hangfire,将SQL Server作为存储介质。
首先需要安装Hangfire核心包:Hangfire.Core。其次,由于这里使用SQL Server作为存储介质,所以还需要安装:Hangfire.SqlServer。Hangfire.SqlServer依赖于hangfire.Core,所以通常我们只需要引入一个包:Hangfire.SqlServer就够了。
GlobalConfiguration.Configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_110) //设置兼容性
.UseColouredConsoleLogProvider() //彩色控制台
.UseSimpleAssemblyNameTypeSerializer() //使用简单程序集名称类型序列化
.UseRecommendedSerializerSettings() //使用推荐的序列化配置
//使用SQLServer存储 需要Hangfire.SqlServer包 需先创建数据库
.UseSqlServerStorage("sql连接字符串", new SqlServerStorageOptions()
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5), //超时时间
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5), //滑动超时
QueuePollInterval = TimeSpan.Zero, //队列轮训间隔
UseRecommendedIsolationLevel = true, //
UsePageLocksOnDequeue = true, //出列时是否需要锁
DisableGlobalLocks = true //是否禁用全局锁
});
进行全局配置,由于Hangfire工作原理是将任务表达式序列化后存储到数据库,所以一般需要配置存储介质、序列化方式等。
注意:需要先手动创建数据库。
①一次性任务,立即执行
string jobId = BackgroundJob.Enqueue(() => Console.WriteLine("你好"));
参数是任务的表达式目录树。
②定期任务,多次执行
RecurringJob.AddOrUpdate(() => Console.WriteLine("你好"), "0/2 * * * * ?");
第一个参数是任务的表达式目录树,第二个参数是Cron表达式。此处表示从0秒开始,每2秒执行一次。
③延迟任务,定点执行
string jobId = BackgroundJob.Schedule(() => Console.WriteLine("延迟"), TimeSpan.FromSeconds(10));
第一个参数是任务的表达式目录树,第二个参数是TimeSpan,在指定时间间隔后执行,仅执行一次。
④延续任务,在某个任务完成后执行
string jobId = BackgroundJob.Enqueue(() => Console.WriteLine("你好"));
//在第一个任务执行之后执行
string jobId2 = BackgroundJob.ContinueJobWith(jobId, () => Console.WriteLine("继续任务"));
第一个参数是上一个任务的唯一标志符,第二个参数是任务的表达式目录树。
⑤传递依赖
interface IEmailHelper
{
void Send(string msg)
{
Console.WriteLine("发送邮件:" + msg);
}
}
public class EmailHelper : IEmailHelper { }
//传递IEmailHelper类,执行类里面的方法
string jobId = BackgroundJob.Enqueue<IEmailHelper>(s => s.Send("你好"));
使用应用程序里的其他类来执行任务并保持代码简洁。
var serverOptions = new BackgroundJobServerOptions()
{
SchedulePollingInterval = TimeSpan.FromSeconds(1) //服务轮训时间 默认是15秒
};
using (var server = new BackgroundJobServer(serverOptions))
{
Console.WriteLine("Hangfire Server started. Press any key to exit...");
Console.ReadKey();
}
原本需要server.Start(),不过在2.0.0版本即将废弃,并且不需要调用Start()方法,自动启动。
Hangfire上手简单,永久存储,值得一试。
Hangfire系列目录:
《.NET任务调度框架Hangfire(二):ASP.NET Core中使用》
Hangfire官网:https://www.hangfire.io/
中文文档:https://www.bookstack.cn/read/Hangfire-zh-official/README.md
感谢阅读,敬请斧正!
版权声明:本文由不落阁原创出品,转载请注明出处!
广告位
暂无评论,大侠不妨来一发?
跟不落阁,学DOTNET!
广告位