栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.net 任务调度 mysql

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.net 任务调度 mysql

开发环境

Visual Studio 2019 16.8.3

.NET Core 5.0

目录导航

1.简介

3.特点

1.安装

2.配置

三、总结

文章正文

一、Hangfire介绍

1.简介

Hangfire是一个开源的.NET任务调度框架,可以定时执行任务、延迟执行任务、以一定时间间隔重复执行任务等。

Hangfire具有可视化控制台,可以直观的看到任务调度情况。并且可以持久化存储,支持分布式任务调度。

2.工作方式

Hangfire有三个主要的组成部分:客户端、存储介质、服务器

客户端负责创建任务,将任务序列化后保存到指定存储介质。

存储介质可以是SQL Server、MySQL、Redis。

服务器用来处理任务,作为一个专用的后台线程,从存储介质中获取任务并处理任务,此外服务器还负责,存储介质中的数据清理。

3.特点

通过一张图了解:

来自hangfire官网,由英文翻译而来。

二、Hangfire使用

这里介绍简单的入门使用,在

控制台应用(.NET Core)中使用Hangfire,将SQL Server作为存储介质。

1.安装

首先需要安装Hangfire核心包:Hangfire.Core。其次,由于这里使用SQL Server作为存储介质,所以还需要安装:Hangfire.SqlServer。Hangfire.SqlServer依赖于hangfire.Core,所以通常我们只需要引入一个包:Hangfire.SqlServer就够了。

2.配置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工作原理是将任务表达式序列化后存储到数据库,所以一般需要配置存储介质、序列化方式等。

注意:需要先手动创建数据库。

3.创建任务

①一次性任务,立即执行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(s => s.Send("你好"));

使用应用程序里的其他类来执行任务并保持代码简介。

4.启动服务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上手简单,永久存储,值得一试。

附录感谢阅读,敬请斧正!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号