龙空技术网

Hangfire之Mssql版本

躺平攻城狮 95

前言:

眼前我们对“firedacmysql”都比较着重,朋友们都想要学习一些“firedacmysql”的相关文章。那么小编同时在网摘上搜集了一些对于“firedacmysql””的相关知识,希望同学们能喜欢,你们快快来了解一下吧!

Hangfire是一款定时调度服务框架,目前已支持Net6,最大的特点是内置控制台,直观监控服务运行性能。

Hangfire包含三大核心组件:客户端、持久化存储、服务端。

官方介绍

理论知识就不阐述了,直接上代码:

首先要用到2个包:

注册服务:

 //注入Hangfire服务  services.AddHangfire(config => config.UseSqlServerStorage("数据库连接字符串"));

配置服务:

//强制显示中文System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");//配置hangfire服务app.UseHangfireServer(new BackgroundJobServerOptions{       WorkerCount = Environment.ProcessorCount * 5, //并发任务数       ServerName = "xx系统定时调度"}); //hangfire权限app.UseHangfireDashboard($"/service/hangfire", new DashboardOptions(){    Authorization = new BasicAuthAuthorizationFilter[] {          new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions(){                                           SslRedirect=false,                                           RequireSsl=false,                                           Users=new BasicAuthAuthorizationUser[]{            new BasicAuthAuthorizationUser(){                   Login="用户",  //也可以将这个写入数据库                   PasswordClear="密码"              }           }      	})    }});//初始化IntervalIntervalService.Create(app.ApplicationServices);          

上述就是简单实现了调度任务,接下来实现初始化任务以及任务创建方法,上面使用到:IntervalService 这个类,接下来实现这个类的方法

public class IntervalService{  /// <summary>  /// 初始化任务创建  /// </summary>  /// <param name="provider"></param>  public static void Create(IServiceProvider provider)  {    IntervalService test = (IntervalService)FormatterServices.GetUninitializedObject(typeof(IntervalService));    test.Start();  }  /// <summary>  /// 主线程开始  /// </summary>  public void Start()  {       //每天早上5点运行一次       RecurringJob.AddOrUpdate("任务名称", () => 具体实现方法, "0 0 5 * * ?", TimeZoneInfo.Local);  }}

这里的执行时间是:Cron表达式 ,目前有很多在线生成Cron表达式的网站,这里介绍几个常用的表达式:

/// Cron表达式示例:/// 0 0 12 * * ?	每天12点运行/// 0 15 10 ? * *   每天10 : 15运行/// 0 15 10 * * ?   每天10 : 15运行/// 0 15 10 * * ? * 每天10 : 15运行/// 0 0/5 * * * ?   每分钟运行一次/// 0 15 10 * * ? 2008  在2008年的每天10:15运行/// 0 * 14 * * ?    每天14点到15点之间每分钟运行一次,开始于14: 00,结束于14: 59。/// 0 0 / 5 14 * * ?    每天14点到15点每5分钟运行一次,开始于14: 00,结束于14: 55。/// 0 0 / 5 14,18 * * ?     每天14点到15点每5分钟运行一次,此外每天18点到19点每5钟也运行一次。/// 0 0 - 5 14 * * ?    每天14 : 00点到14: 05,每分钟运行一次。/// 0 10,44 14 ? 3 WED  3月每周三的14: 10分到14: 44,每分钟运行一次。/// 0 15 10 ? * MON - FRI    每周一,二,三,四,五的10: 15分运行。/// 0 15 10 15 * ?  每月15日10 : 15分运行。/// 0 15 10 L * ?   每月最后一天10 : 15分运行。/// 0 15 10 ? * 6L  每月最后一个星期五10:15分运行。/// 0 15 10 ? * 6L 2007 - 2009    在2007,2008,2009年每个月的最后一个星期五的10: 15分运行。/// 0 15 10 ? * 6#3	每月第三个星期五的10:15分运行。

避坑指南:

如操作系统是linux,则可能会出现时差问题(晚上变白天执行),有些说需要在代码中TimeZoneConverter依赖,亲身经历无效果,最后在服务器上执行:

设置:\cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime查看:date

如果是docker部署,则需要dockerfile文件里设置:

#设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

运行程序后,在路径中输入: /service/hangfire,即可看到运行界面,程序初次运行时有点慢,会自动创建表,如果是需要使用新库则先创建库。

至此定时服务已经完成,看下运行效果如下:

下一篇介绍:Hangfire之Mysql 版本

标签: #firedacmysql