.NET Core 6使用Hangfire 实现后台作业管理
一、环境参数
IDE环境 :
框架环境:ASP.NET Core 6 + Hangfire + MySQL
二、新建ASP.NET Core空项目
三、Nuget引入程序集
Hangfire 作为几个 NuGet 包分发,从主要包 Hangfire.Core 开始,它包含所有主要类和抽象。 Hangfire.SqlServer 等其他包提供功能或抽象实现。 要开始使用 Hangfire,请安装主软件包并选择一个可用的存储。 这里我是用MySql作为Hangfire的Storage。Hangfire 官方在免费版中只提供了 SqlServer 接入的支持,在收费版多一个 Redis。 需要 MongoDB、SqlServer 、PostgreSql、SQLite 等其他 Storages 的可以自己寻找第三方的开源项目, 这里有一个官方推荐的扩展清单https://www.hangfire.io/extensions.html,清单中列出了一些其他种类的 Storages。
1、添加Nuget引入程序集
Hangfire.Core Hangfire.MySqlStorage --mysql数据库存储 Hangfire.AspNetCore --AspNetCore支持 Hangfire.Dashboard.BasicAuthorization --可视化+权限控制 Hangfire.HttpJob --httpJob
2、先创建MySQL数据库
hangfiredb
3、直接贴代码Program.cs
using Hangfire; using Hangfire.Dashboard.BasicAuthorization; using Hangfire.HttpJob; using Hangfire.MySql; using System.Configuration; using System.Transactions; using static System.Net.WebRequestMethods; var builder = WebApplication.CreateBuilder(args); var Config = builder.Configuration; // Add Hangfire services. builder.Services.AddHangfire(configuration => configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseStorage(new MySqlStorage( Config["ConnectionStrings:HangfireConnection"], new MySqlStorageOptions { TransactionIsolationLevel = IsolationLevel.ReadCommitted, QueuePollInterval = TimeSpan.FromSeconds(15), JobExpirationCheckInterval = TimeSpan.FromHours(1), CountersAggregateInterval = TimeSpan.FromMinutes(5), PrepareSchemaIfNecessary = true, DashboardJobListLimit = 50000, TransactionTimeout = TimeSpan.FromMinutes(1), TablesPrefix = "Hangfire" })).UseHangfireHttpJob()); // Add the processing server as IHostedService builder.Services.AddHangfireServer(); var app = builder.Build(); app.UseHangfireDashboard("/hangfire", new DashboardOptions { Authorization = new[] {new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions { RequireSsl = false, SslRedirect = false, LoginCaseSensitive = true, Users = new [] { new BasicAuthAuthorizationUser { Login = "admin", PasswordClear = "admin" } } })} }); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Hello World!"); }); }); app.Run();
可选参数说明: TransactionIsolationLevel- 事务隔离级别。默认为已提交读。 QueuePollInterval- 作业队列轮询间隔。默认值为 15 秒。 JobExpirationCheckInterval- 作业过期检查间隔(管理过期记录)。默认值为 1 小时。 CountersAggregateInterval- 聚合计数器的间隔。默认为 5 分钟。 PrepareSchemaIfNecessary- 如果设置为true,它会创建数据库表。默认为true。 DashboardJobListLimit- 仪表板作业列表限制。默认值为 50000。 TransactionTimeout- 交易超时。默认值为 1 分钟。 TablesPrefix- 数据库中表的前缀。默认为无
4、appsettings.json设置MySQL路径
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Microsoft.Hosting.Lifetime": "Information", "Hangfire": "Information" } }, "ConnectionStrings": { "HangfireConnection": "server=x.x.x.x;Database=hangfiredb;userid=root;password=123456;SslMode=none;Allow User Variables=true;" }, "AllowedHosts": "*" }
四、运行项目
1、项目已经跑起来了
2、访问地址链接,输入账号admin,密码admin
https://localhost:7223/hangfire
更详细的介绍链接
https://blog.csdn.net/liyou123456789/article/details/125449302