1.negut引入hangfire相关包
Hangfire.AspNetCore,Hangfire.Core,Hangfire.Dashboard.BasicAuthorization,Hangfire.MySqlStorage

2.Appsetting 配置hangfire资源
- "HangFire": {
- "Connection": "Server=127.0.0.1;uid=root;pwd=wakamysql666;database=Hangfire_DB;AllowLoadLocalInfile=true;Allow User Variables=True;",
- "pathMatch": "/hangfire",
- "Login": "login",
- "PasswordClear": "pwd"
- },
3.自定义扩展类
- /// <summary>
- /// 任务调度
- /// </summary>
- public static class HangfireSetup
- {
- public static void AddHangfireSetup(this IServiceCollection services)
- {
- if (services == null) throw new ArgumentNullException(nameof(services));
- if (services == null) throw new ArgumentNullException(nameof(services));
- services.AddHangfire(configuration => configuration
- .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)//此方法 只初次创建数据库使用即可
- .UseSimpleAssemblyNameTypeSerializer()
- .UseRecommendedSerializerSettings()
- .UseStorage(new MySqlStorage(Appsettings.app("HangFire", "Connection"), new MySqlStorageOptions
- {
- TransactionIsolationLevel =
- (IsolationLevel?) System.Data.IsolationLevel.ReadCommitted, //事务隔离级别。默认是读取已提交
- QueuePollInterval = TimeSpan.FromSeconds(15), //- 作业队列轮询间隔。默认值为15秒。
- JobExpirationCheckInterval = TimeSpan.FromHours(1),
- CountersAggregateInterval = TimeSpan.FromMinutes(5),
- PrepareSchemaIfNecessary = false, // 如果设置为true,则创建数据库表。默认是true
- DashboardJobListLimit = 50000,
- TransactionTimeout = TimeSpan.FromMinutes(1),
- TablesPrefix = "Hangfire"
- })));
- services.AddHangfireServer();
- }
- }
4.在startupConfigureServices注入扩展
- services.AddHangfireSetup();//任务调度

5.配置MIddleware
- //任务调度中间件
- public static class HangfireMiddleware
- {
- public static void UseHangfireMiddleware(this IApplicationBuilder app)
- {
- if (app == null) throw new ArgumentNullException(nameof(app));
- app.UseHangfireServer(); //配置服务//ConfigureOptions()
- app.UseHangfireDashboard(Appsettings.app("HangFire", "pathMatch"), HfAuthor()); //配置面板
- //BackgroundJob.Enqueue(() => Console.WriteLine("Hello world from Hangfire!"));
- HangfireService(); //配置各个任务
- }
-
- /// <summary>
- /// 配置账号模板信息
- /// </summary>
- /// <returns></returns>
- public static DashboardOptions HfAuthor()
- {
- var filter = new BasicAuthAuthorizationFilter(
- new BasicAuthAuthorizationFilterOptions
- {
- SslRedirect = false,
- RequireSsl = false,
- LoginCaseSensitive = false,
- Users = new[]
- {
- new BasicAuthAuthorizationUser
- {
- Login = Appsettings.app("HangFire", "Login"), //可视化的登陆账号
- PasswordClear = Appsettings.app("HangFire", "PasswordClear") //可视化的密码
- }
- }
- });
- return new DashboardOptions
- {
- Authorization = new[] {filter}
- };
- }
-
- /// <summary>
- /// 配置启动
- /// </summary>
- /// <returns></returns>
- public static BackgroundJobServerOptions ConfigureOptions()
- {
- return new()
- {
- Queues = new[] {"Job", nameof(HangfireConfigureQueue.picturetooss)}, //队列名称,只能为小写
- WorkerCount = Environment.ProcessorCount * 5, //并发任务
- ServerName = "HangfireServer" //代表服务名称
- };
- }
-
- #region 配置服务
-
- public static void HangfireService()
- {
- // "0 0 1 * * ? " 每天凌晨一点执行阿里云OSS
- RecurringJob.AddOrUpdate<IOrderItemInfoService>(_ => _.JobOSS(), "0 0 1 * * ? ", TimeZoneInfo.Local,
- nameof(HangfireConfigureQueue.picturetooss));
-
- // "0 0 1 * * ? " 每天早上七点执行定时任务更新汇率
- RecurringJob.AddOrUpdate<ICurrencyInfosService>(_ => _.UpdateRateByJob(), "0 0 7 * * ? ",
- TimeZoneInfo.Local, nameof(HangfireConfigureQueue.picturetooss));
- }
-
- #endregion
- }
6.startupConfigure配置使用中间件
- app.UseHangfireMiddleware();//Job
效果图:


结语:到此hangfire实现定时任务的配置已经全部完成。
到此这篇关于.net core 基于Hangfire+Mysql持久化实现定时任务的文章就介绍到这了,更多相关.net core Hangfire定时任务内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!